一部のレガシーコードでは、新しいキー値アイテムの追加やキーがすでに存在する場合の値の更新を容易にするために、次の拡張メソッドを参照しています。
方法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では、ディクショナリを使用せずに、アイテムを更新したり、インデクサーを使用して新しいアイテムを追加したりできます。この違いは、C#> 3.0バージョンで解消されましたか?
このメソッドの目的は、ユーザーが同じキーと値を再度送信した場合に例外をスローしすぎないことです。メソッドは、新しい値でエントリを更新し、新しいキーと値のペアがメソッドに送信された場合に新しいエントリを作成する必要があります。 。