虽然a
允许您通过Dictionary
获取值或default(T)
,但是相应的GetValueOrDefault
不允许您这样做,而是提供了两种麻烦的方法喜欢:
IDictionary
(如果密钥不存在则抛出)operator[]
(使用了参数)来自C ++背景,我被教导认为如果没有提供一些琐碎的内容,可能是由于性能问题,但是同时使用上述两种方法之一定义扩展方法很简单:
TryGetValue
为什么没有提供此方法?如果不是,那么上述实现等同于public static class IDictionaryExtensions
{
public static T GetValueOrDefault<K, T>(this IDictionary<K, T> dictionary, K key)
{
var value = default(T);
bool hasValue = dictionary.TryGetValue(key, out value);
if (hasValue) {
return value;
} else {
return default(T);
}
}
}
吗?
答案 0 :(得分:4)
.NET团队中只有人可以回答“为什么”没有提供功能。
对于您的方法,它看起来不错,但是几乎没有多余的语句可以删除。可以这样重写:
return dictionary.TryGetValue(key, out var value) ? value : default(T);
IMO这也是多余的,因为如果TryGetValue
返回false
,该值将始终初始化为默认值。因此,只要需要使用GetValueOrDefault
,就可以只使用TryGetValue
,内联out
变量声明使在一行中易于使用。