キーが見つからない場合に、スローするのではなくデフォルト値を返す IDictionary 実装はありますか? 質問する

キーが見つからない場合に、スローするのではなくデフォルト値を返す IDictionary 実装はありますか? 質問する

キーが見つからない場合、インデクサーはDictionary例外をスローします。IDictionary代わりに を返す実装はありますかdefault(T)?

この方法については知っていますTryGetValue()が、LINQ で使用するのは不可能です。

これは私が必要としていることを効率的に実行しますか?

myDict.FirstOrDefault(a => a.Key == someKeyKalue);

ハッシュ検索を使用する代わりにキーを反復処理すると思われるため、そうはならないと思います。

ベストアンサー1

確かに、それは全く効率的ではありません。

コメントによると、.Net Core 2+ / NetStandard 2.1+ / Net 5では、MSは拡張メソッドを追加しましたGetValueOrDefault()

以前のバージョンでは、拡張メソッドを自分で記述できます。

public static TValue GetValueOrDefault<TKey,TValue>
    (this IDictionary<TKey, TValue> dictionary, TKey key)
{
    TValue ret;
    // Ignore return value
    dictionary.TryGetValue(key, out ret);
    return ret;
}

または C# 7.1 の場合:

public static TValue GetValueOrDefault<TKey,TValue>
    (this IDictionary<TKey, TValue> dictionary, TKey key) =>
    dictionary.TryGetValue(key, out var ret) ? ret : default;

使用するもの:

  • 式本体メソッド (C# 6)
  • 出力変数 (C# 7.0)
  • デフォルトのリテラル (C# 7.1)

おすすめ記事