2011-10-24 9 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を参照されます。

私はUserオブジェクトを複製して、複製のプロパティを変更することが元のオブジェクトに反映されないようにします。

編集:

だから私は、次のコードスニペットを書いた:

 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

うーん... Iこのような辞書を意味するDictionary > – Attilah

+2

いくつかのソースコードを表示してください。あなたは何を試しましたか? 「失敗する」とはどういう意味ですか?エラーメッセージ/例外はありますか? – Yahia

+0

質問の本文にこれを入力できないようです(Dictionary >)。 :( – Attilah

答えて

3

純コレクションが組み込まれていませんサポートをクローニング。

元の辞書のすべてのエントリをループし、新しい辞書に新しいList<User>の対応するエントリを追加し、元のリストをループしてUserオブジェクトのコピーを追加する必要があります新しいリスト

0

あなたがBinaryFormatter使用することができます。

1)SerializeをあなたのオブジェクトをMemoryStreamをへ

ので

2)新しいオブジェクトへのデシリアライズのMemoryStream

関連する問題