1. ホーム
  2. c#

[解決済み】辞書に新しい項目を追加したり、既存の項目を更新する方法

2022-04-16 04:40:54

質問

レガシーコードの中に、新しいキーと値のアイテムを追加したり、キーがすでに存在する場合に値を更新したりするための、以下の拡張メソッドを見かけました。

方法-1(レガシーコード)。

public static void CreateNewOrUpdateExisting<TKey, TValue>(
    this IDictionary<TKey, TValue> map, TKey key, TValue value)
{            
    if (map.ContainsKey(key))
    {
        map[key] = value;
    }
    else
    {
        map.Add(key, value);
    }
}

しかし、私が確認したところ map[key]=value は全く同じ働きをします。つまり、この方法は、以下の方法-2で置き換えることができます。

方法-2.

public static void CreateNewOrUpdateExisting<TKey, TValue>(
    this IDictionary<TKey, TValue> map, TKey key, TValue value)
{
    map[key] = value;
}

さて、私の質問は... 方法-1を方法-2に置き換えた場合、何か問題があるのでしょうか?どんな可能性のあるシナリオでも壊れるのでしょうか?

あと、昔はこれがHashTableとDictionaryの違いだったと思うのですが。HashTableはindexerを使うことで項目の更新や新規追加が可能ですが、Dictionaryはそうではありません!!!。C# > 3.0のバージョンでこの差はなくなったのでしょうか?

このメソッドの目的は、ユーザーが同じキー-値を再度送信した場合に例外をスローしすぎないようにすることです。

解決方法は?

<ブロッククオート

方法1を方法2に置き換えた場合、何か問題があるのでしょうか?

いいえ、単に map[key] = value . この2つのオプションは同等です。



について Dictionary<> vs. Hashtable : Reflector を起動すると、両方のクラスのインデックスセッターから this.Insert(key, value, add: false); であり add パラメータは、重複するキーを挿入したときに例外をスローする役割を担っています。したがって、動作はどちらのクラスでも同じです。