DataTable中发生了一件奇怪的事情:创建一个备份DataTable

本文关键字:DataTable 创建 备份 一个 发生了 一件 | 更新日期: 2023-09-27 18:04:07

        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?

DataTable中发生了一件奇怪的事情:创建一个备份DataTable

在C#中,唯一创建新对象的是"new"关键字(或在其中使用新关键字的方法(-您只需要制作一个指针(dt2(,并将其指向dt1所指向的相同DataTable。因此,那里只有一个DataTable实例。

使用DataTableCopy()方法来创建表的新实例,即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实例,通过任何关联引用访问它时都可以看到此更新。