2013-03-28 19 views
1

我有一個字典問題。小例子:如果我發送函數,更改字典

 Dictionary<int, bool> dict = new Dictionary<int, bool>(); 
     for (int i = 0; i < 5; i++) 
     { 
      dict.Add(i, true); 
     } 
     var dict2 = dict; 
     dict2.Clear(); 

此後,我必須清除字典。我需要做什麼,如果我需要一本改變的字典和一本不變的字典?

+1

'dict2.Clear()'也清除'dict',我想這是不希望的,是嗎? – 2013-03-28 08:43:17

+0

是的!問題在這。 – EXTRAM 2013-03-28 08:44:37

+1

試試這一個:var dict2 = dict.ToDictionary(x => x.Key,x => x.Value); – Killo 2013-03-28 08:46:33

回答

4

創建一個副本,而不是僅僅複製引用:

var dict2 = new Dictionary<int, bool>(dict); 
+0

謝謝。你的回答非常有幫助! – EXTRAM 2013-03-28 08:44:55

2

由於Dictionary類,所以它是一個reference type

當你寫

var dict2 = dict; 

你居然分配dictdict2相同的引用。這就是爲什麼當你想使用Clear()方法,它影響他們兩個。您應該複製它們而不是複製它們的引用。喜歡;

var dict2 = new Dictionary<int, bool>(dict); 

C# Language Specification;

值類型的變量直接包含其數據,而變量的引用類型引用存儲 他們的數據,後者是 稱爲對象。使用參考類型時,兩個變量可能引用同一個對象,因此可能對一個變量操作 以影響由其他變量引用的對象。對於值類型,變量每個都有自己的 數據副本,並且不可能對一個到另一個的操作影響另一個 。