在DataTable中发生了奇怪的事情:创建备份DataTable

时间:2011-07-30 21:45:35

标签: c#

        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?

3 个答案:

答案 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实例,您可以通过任何关联的引用访问此更新。