我正在使用以下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中修改表格?为什么会出现这种情况?
答案 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
引用引用的相同对象。
答案 1 :(得分:1)
字典中的表只是您添加的表的引用。 如果您不想修改字典中的表,则应添加它的副本。