如果缺少键,则Index into Dictionary会引发异常.是否有IDictionary的实现,而是返回默认值(T)?
我知道"TryGetValue"方法,但这不可能与linq一起使用.
这会有效地做我需要的吗?:
myDict.FirstOrDefault(a => a.Key == someKeyKalue);
我认为它不会,因为我认为它将迭代键而不是使用哈希查找.
实际上,这根本不会有效.
你总是可以写一个扩展方法:
public static TValue GetValueOrDefault(this IDictionary dictionary, TKey key) { TValue ret; // Ignore return value dictionary.TryGetValue(key, out ret); return ret; }
或者使用C#7.1:
public static TValue GetValueOrDefault(this IDictionary dictionary, TKey key) => dictionary.TryGetValue(key, out var ret) ? ret : default;
用途:
表达方法(C#6)
一个输出变量(C#7.0)
默认文字(C#7.1)
携带这些扩展方法可以帮助..
public static V GetValueOrDefault(this IDictionary dict, K key) { return dict.GetValueOrDefault(key, default(V)); } public static V GetValueOrDefault (this IDictionary dict, K key, V defVal) { return dict.GetValueOrDefault(key, () => defVal); } public static V GetValueOrDefault (this IDictionary dict, K key, Func defValSelector) { V value; return dict.TryGetValue(key, out value) ? value : defValSelector(); }
如果有人使用.net core 2及更高版本(C#7.X),则会引入CollectionExtensions类,并且如果字典中没有key,则可以使用GetValueOrDefault方法获取默认值。
DictionarycolorData = new Dictionary (); string color = colorData.GetValueOrDefault("colorId", string.Empty);