class a
{
  private DataTable _dt;
  
  private void a()
  {
    _dt = new DataTable();
    b();
  }
  
  private void b()
  {
    int cnt= _dt.rows.count;
  }}在C#中,不能通过这种方式传递_dt的吗?我试过无论把变量或者成员函数变为protected或public都不能在b()中得到_bt

解决方案 »

  1.   

    private void a() 
    这是什么?
    构造函数? private a()
      

  2.   

    首先,你的构造函数怎么能加void呢?
    其次,_dt.rows.count中的R和C应该是大写
    最后,不知道你到底要干什么
      

  3.   

    class a
    {
      private DataTable _dt;
     
      private void a() //这里写错了,你这里应该是构造函数,没有任何类型返回,改成public a(){}  {
        _dt = new DataTable();
        b();
      }
     
      private void b()
      {
        int cnt= _dt.rows.count;
      }} 
      

  4.   

    可能我写得有些歧义,更改如下:
    class a 

      private DataTable _dt;   public a() //这是构造函数
      {  }  private void aaa() //这是一个类成员函数  { 
        _dt = new DataTable();
        _dt = xxxxx; //假设这里有一个方法返回一个DataTable() 
        b(); 
      }   private void b() 
      { 
        int cnt= _dt.rows.count; //跟踪到这里_dt始终是null
      } } 
      

  5.   


    如果这就是你代码的全部,在执行b的时候_dt为null的话,唯一的解释就是xxxxx处返回的DataTable为null
    但我相信你的代码肯定不止这些,问题应该是出在你没贴出来的部分
      

  6.   

    我这里怎么没问题?怀疑你到底测过没有       public class a
            {
                private DataTable _dt;            public a() //这是构造函数 
                {
                    aaa();
                }            private void aaa() //这是一个类成员函数 
                {
                    _dt = new DataTable();
                    //_dt = xxxxx; //假设这里有一个方法返回一个DataTable() 
                    b();
                }            private void b()
                {
                    int cnt = _dt.Rows.Count; //跟踪到这里_dt始终是null 
                }        } 
      

  7.   

    问题已经找到了,原来不是变量作用域的问题。
    我在一个winform的程序中有这样的代码的,b()成员函数是一个自定义的函数,而aaa()是form_load()函数,除此之后还有另外一个组件上面调用了b()。对——dt的初始化我是放在form_load()中,但是在winform程序中对组件的初始化是放在form的构造函数中的,因此实际上b()的调用要比form_load()早,用跟踪的方法跟到b()里面的_dt这时还是null。现在我把_dt的初始化放在了构造函数里,问题就解决了。