2011-10-24 72 views
-1

你如何克隆一個字典,如這一個詞典:克隆具有列表作爲值

Dictionary<int, List<User>>() 

每次嘗試我做克隆它最終失敗的。

如果我有這樣的:

Dictionary<int, List<User>> dict1 = new Dictionary<int, List<User>>(); 
User user1=new User{Name="Mey"}; 
dict1.Add(1,user1); 

這樣做:

var dict2 = new Dictionary<int, List<User>>(dict1); 

dict2仍然會引用user1的,而不是一個新的用戶對象。

我希望用戶對象被複制,以便更改克隆屬性不反映在原始對象上。

編輯:

所以我寫了下面的代碼片段:

 var dict2 = new Dictionary<int, List<User>>(); 

     //clone the dict1 dictionary 
     foreach (var item in dict1) 
     { 
      var list = new List<User>(); 
      foreach (var u in item.Value) 
      { 
       list.Add(new User{ Name = u.Name, Total=u.Total}); 
      } 
      dict2.Add(item.Key, list); 
     } 

    class User 
    { 
     public string Name{get;set;} 
     public double Total{get;set;} 
    } 
+0

嗯...我意思是這樣的字典Dictionary > – Attilah

+2

請顯示一些源代碼..你有什麼嘗試? 「失敗」是什麼意思?任何錯誤消息/例外? – Yahia

+0

我似乎無法在問題的主體中輸入此字典>)。 :( – Attilah

回答

3

的.Net集合不會有內置的克隆支持。

您需要創建一個新字典,循環訪問原始字典中的所有條目,在新字典中添加一個新的List<User>的對應條目,並遍歷原始列表以將User對象的副本添加到新的名單。

0

您可以使用BinaryFormatter

1)序列化你的對象到MemoryStream

因此

2)反序列化的MemoryStream到一個新的對象