为什么`IDictionary`不能让您轻松地在其界面中通过键或默认值获取值?

时间:2018-08-11 15:20:16

标签: c# .net .net-core

虽然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); } } } 吗?

1 个答案:

答案 0 :(得分:4)

.NET团队中只有人可以回答“为什么”没有提供功能。

对于您的方法,它看起来不错,但是几乎没有多余的语句可以删除。可以这样重写:

return dictionary.TryGetValue(key, out var value) ? value : default(T);

IMO这也是多余的,因为如果TryGetValue返回false该值将始终初始化为默认值。因此,只要需要使用GetValueOrDefault,就可以只使用TryGetValue,内联out变量声明使在一行中易于使用。