DataTable创建对象时,是创建一个新的对象还是对原来的引用?
比如在myDataSet.Tables["Products"]中添加主键可以通过以下代码
 DataTable productsDataTable = myDataSet.Tables["Products"];
        DataColumn[] productsPrimaryKey =
          new DataColumn[]
      {
        productsDataTable.Columns["ProductID"]
      };
        productsDataTable.PrimaryKey = productsPrimaryKey;我的理解是:这样添加的主键是添加到了productsDataTable中,而不是添加到了myDataSet.Tables["Products"]中。是不是productsDataTable只是myDataSet.Tables["Products"]的引用呢?

解决方案 »

  1.   

    不是引用,myDataSet.Tables["Products"]的值也是DataTable,只是把这个值赋给你定义的productsDataTable 而已。。
      

  2.   

    productsDataTable是myDataSet.Tables["Products"]的一个副本
      

  3.   

    举个例子dataset ds=数据清空dataset:ds.Clear();datatable dt1=ds.tables[0];//界面1赋值   datatable dt2=ds.tables[0];//界面2赋值//修改了dt2 --> dt1也变化  ds.tables[0]也会变化,变化成dt2修改后的数据集
      

  4.   


    添加到productsDataTable中,就相当于添加到了myDataSet.Tables["Products"]中,它们指向的是同一个对象。productsDataTable和myDataSet.Tables["Products"]都是栈上的一个地址空间,它们的值都是对堆上分配的一个DataTable对象的引用。
      

  5.   

    .copy()可以 复制一份datatable 就是一个新的