次の拡張メソッドを使用できますTryGetValue
:
public static U GetValueByKeyOrNull<T, U>(this Dictionary<T, U> dict, T key)
where U : class
{
U value;
dict.TryGetValue(key, out value);
return value;
}
おかげであなたは書くことができるでしょう
somedict.GetValueByKeyOrNull("key1")
結局、これを実行しようとして、明示的なインターフェイス実装を備えたディクショナリクラスから派生したバリアントを使用するバリアントを思いつきました。KeyNotFoundExceptionがキーでディクショナリ値にアクセスする代わりにnullを取得する方法は?
あれは
public interface INullValueDictionary<T, U>
where U : class
{
U this[T key] { get; }
}
public class NullValueDictionary<T, U> : Dictionary<T, U>, INullValueDictionary<T, U>
where U : class
{
U INullValueDictionary<T, U>.this[T key]
{
get
{
U val;
dict.TryGet(key, out val);
return val;
}
}
}
どこでも元の辞書の代わりにそれを使用してください:
//create some dictionary
NullValueDictionary<int, string> dict = new NullValueDictionary<int, string>
{
{1,"one"}
};
//have a reference to the interface
INullValueDictionary<int, string> idict = dict;
string val = idict[2]; // null
val = idict[1]; // "one"