DataTable dt1 = new DataTable(); //I made this as a backup
//add 3 columns
dt1.Columns.Add();
dt1.Columns.Add();
dt1.Columns.Add();
MessageBox.Show("Number of Columns in dt1: " + dt1.Columns.Count);
DataTable dt2 = dt1;
//I added another column just to say that that table changed
dt2.Columns.Add();
MessageBox.Show("Number of Columns in dt1: " + dt1.Columns.Count + "rnNumber of Columns in dt2: " + dt2.Columns.Count);
//there's four columns now in both tables even though I added the column only in dt2
为什么会发生这种情况?我如何更改它,以便无论我对dt2做什么都不会更改dt1?
在C#中,唯一创建新对象的是"new"关键字(或在其中使用新关键字的方法(-您只需要制作一个指针(dt2
(,并将其指向dt1
所指向的相同DataTable。因此,那里只有一个DataTable
实例。
使用DataTable
的Copy()
方法来创建表的新实例,即dt2 = dt1.Copy();
由于DataTable是引用类型,您需要使用以下选项之一:
DataTable dt2 = dt1.Clone();
或
DataTable dt2 = dt1.Copy();
请参阅
http://msdn.microsoft.com/en-us/library/system.data.datatable.copy.aspx
http://msdn.microsoft.com/en-us/library/system.data.datatable.clone.aspx
DataTable dt2 = dt1;
通过这样做,您引入了对最初创建为dt1的DataTable的新引用。因此,您在内存中有一个DataTable对象实例和两个对它的引用
dt2.Columns.Add();
更新此单个DataTable实例,通过任何关联引用访问它时都可以看到此更新。