C#Dictionary.add(key, value)
とiの違いは何ですか?Dictionary[key] = value
最新バージョンでは重複キーを挿入してもエラーが発生しないことに気づきましたがArgumentException
、最初のバージョンを優先する理由はありますか?
編集: これについて信頼できる情報源を持っている人はいますか? MSDN を試してみましたが、いつものように無駄な情報です :(
ベストアンサー1
パフォーマンスはほぼ100%同一です。Reflector.netでクラスを開いて確認することができます。
これは This インデクサーです:
public TValue this[TKey key]
{
get
{
int index = this.FindEntry(key);
if (index >= 0)
{
return this.entries[index].value;
}
ThrowHelper.ThrowKeyNotFoundException();
return default(TValue);
}
set
{
this.Insert(key, value, false);
}
}
これは Add メソッドです:
public void Add(TKey key, TValue value)
{
this.Insert(key, value, true);
}
Insert メソッド全体はかなり長いので投稿しませんが、メソッドの宣言は次のとおりです。
private void Insert(TKey key, TValue value, bool add)
そして関数のさらに下では、次のことが起こります:
if ((this.entries[i].hashCode == num) && this.comparer.Equals(this.entries[i].key, key))
{
if (add)
{
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);
}
これはキーがすでに存在するかどうかを確認し、キーが存在し、パラメーター add が true の場合は例外をスローします。
したがって、あらゆる目的と意図においてパフォーマンスは同じです。
他のいくつかの言及と同様に、同じキーを 2 回追加しようとする場合にチェックが必要かどうかが重要です。
長い投稿で申し訳ありませんが、大丈夫だと思います。