C# で辞書に追加するさまざまな方法 質問する

C# で辞書に追加するさまざまな方法 質問する

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 回追加しようとする場合にチェックが必要かどうかが重要です。

長い投稿で申し訳ありませんが、大丈夫だと思います。

おすすめ記事