2014-02-28 108 views
1

我使用下面的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中的表格?這是爲什麼?

回答

3

如何防止修改詞典中的表格?

傳遞您的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

內部字典表只是一個您添加您的表的參考。 如果你不想修改字典裏面的表,你應該添加它的一個副本。