Dictionaryへの追加の方法による挙動の違い
2007/12/13
2021/10/09
C#の、System.Collections.Generic.Dictionary クラスは、重複するキーをAddメソッドで追加しようとすると、例外が飛ぶ。javaのHashMapみたいに上書きしてくれるのを期待してたんですが。。。
System.ArgumentException はハンドルされませんでした。
Message=”同一のキーを含む項目が既に追加されています。”
Item プロパティを使用すると、Dictionary 内に存在しないキーの値を設定することで、新しい要素を追加することもできます (例 : myCollection[myKey] = myValue) (Visual Basic では myCollection(myKey) = myValue)。ただし、指定したキーが Dictionary 内に既に存在する場合、Item プロパティを設定すると既存の値が上書きされます。一方、Add メソッドは、指定したキーを持つ値が既に存在する場合、例外をスローします。
http://msdn2.microsoft.com/ja-jp/library/k7z0zy8k%28VS.80%29.aspx
メソッド経由とインデクサ経由で動作が違うということか。
IDictionary<int, string> dict = new Dictionary<int, string>(); dict.Add(1, "1"); //dict.Add(1, "10"); //-> ArgumentException dict[1] = "10"; //-> ok |
インデクサ経由だと、重複したキーへの追加でも例外が出なくなるようです。
そうゆう仕様にした気持ちはわかるけど、わかりにくい。