キーが見つからない場合、インデクサーは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)