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 + "\r\nNumber 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?
答案 0 :(得分:3)
在C#中,唯一创建新对象的是“new”关键字(或在其中使用new关键字的方法..) - 你只是制作一个指针(dt2
)并指向它与dt1
相同的DataTable指向。所以那里只有一个DataTable
实例。
使用Copy()
的{{1}}方法创建表格的新实例,即DataTable
答案 1 :(得分:1)
由于DataTable是引用类型,因此您需要使用以下选项之一:
DataTable dt2 = dt1.Clone();
OR
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
答案 2 :(得分:1)
DataTable dt2 = dt1;
通过这样做,您将引入一个最初创建为dt1的DataTable的新引用。所以你在内存中有一个DataTable对象实例,并且有两个对它的引用。
dt2.Columns.Add();
更新此单个DataTable实例,您可以通过任何关联的引用访问此更新。