代码之家  ›  专栏  ›  技术社区  ›  Shoe

为什么“IDictionary”不允许您在其接口中轻松地按键或默认值获取值?

  •  2
  • Shoe  · 技术社区  · 6 年前

    Dictionary 允许您获取值或 default(T) 通过 GetValueOrDefault IDictionary 不允许您执行相同的操作,而是提供了两种繁琐的方法,如:

    • operator[] (如果密钥不存在则抛出)
    • TryGetValue (使用了out参数)

    来自C++背景的,我被教导认为,如果不提供琐碎的东西,可能是因为性能问题,但同时使用上面两种方法中的一种定义扩展方法是微不足道的:

    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);
            }
        }
    }
    

    没有提供这种方法的原因是什么?如果不是,上述实现是否等于 Dictionary.GetValueOrDefault ?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Selman Genç    6 年前

    只有.NET团队中的人员才能回答为什么不提供函数。

    至于您的方法,它看起来不错,但是您可以删除的冗余语句很少。它可以这样重写:

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

    IMO这也是多余的,因为如果 TryGetValue 回报 false , 无论如何。所以每当你需要使用 GetValueOrDefault ,您可以使用 ,内联 out 变量声明使在单行中使用变得容易。