防止在Dictionary中修改对象

时间:2014-02-28 08:47:40

标签: c# reference datatable

我正在使用以下c#代码:

DataTable table = GetDataTable();
Dictionary<int, DataTable> d = new Dictionary<int, DataTable>();
d.Add(1, table);
table = modifyTable(table);

//Do some operations on d[1]

在我更改表格时,字典(d[1])内的表格会发生变化。如何防止在Dictionary中修改表格?为什么会出现这种情况?

2 个答案:

答案 0 :(得分:3)

  

如何防止修改Dictionary中的表?

传递DataTable的副本。使用DataTable.Copy方法创建很容易:

DataTable table = GetDataTable();
Dictionary<int, DataTable> d = new Dictionary<int, DataTable>();
d.Add(1, table.Copy());
  

为什么会出现这种情况?

您正在传递对DataTable的引用,因为DataTable是引用类型。因此,您有两个指向一个DataTable实例的引用。因此,当您使用d[1]返回的引用执行操作时,您正在修改由table引用引用的相同对象。

enter image description here

答案 1 :(得分:1)

字典中的表只是您添加的表的引用。 如果您不想修改字典中的表,则应添加它的副本。