Dictionaryへの追加の方法による挙動の違い

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

インデクサ経由だと、重複したキーへの追加でも例外が出なくなるようです。

そうゆう仕様にした気持ちはわかるけど、わかりにくい。

コメントする

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。