2016-06-17 9 views
1
var solutions = new Dictionary<int, List<Tuple<int, int>>>(); 

List<Tuple<int, int>> list = null; 

var z = solutions.TryGetValue(sum, out list); 
if (!z) 
{ 
    list = new List<Tuple<int, int>>(); 
    solutions.Add(sum, list); 
} 

list.Add(new Tuple<int, int>(a, b)); 

要素をリスト(最後の行)に追加すると、辞書の対応するキー値が変更される理由を理解できませんか?リスト<T>はどのように辞書<K, List<T>で動作しますか?

+5

辞書の値はリストオブジェクトへの参照に過ぎないので、 'list'の値と同じです。 –

+0

@AlexD:ここでは「参考に」と言わないほうがいいと思います。私はあなたが何を意味しているのか知っていますが、値渡しの参照と参照渡しの引数の間には大きな違いがあります。 –

+0

@JonSkeet OK、削除)。 – AlexD

答えて

2

リストに要素を追加することで、辞書のキー値のペアを変更することはありません。あなたはリストを変更しています。辞書はそのリストへの参照を保持しているだけなので、変更されるようです。

関連する問題