【问题标题】:Returning a default value. (C#)返回一个默认值。 (C#)
【发布时间】:2010-09-26 21:53:56
【问题描述】:

我正在创建自己的字典,但在实现 TryGetValue 函数时遇到了问题。当找不到密钥时,我没有任何东西可以分配给 out 参数,所以我保持原样。这会导致以下错误:“必须在控制离开当前方法之前将输出参数'value'分配给”

所以,基本上,我需要一种方法来获取默认值(0、false 或 nullptr,具体取决于类型)。我的代码类似于以下:

class MyEmptyDictionary<K, V> : IDictionary<K, V>
{
    bool IDictionary<K, V>.TryGetValue (K key, out V value)
    {
        return false;
    }

    ....

}

【问题讨论】:

    标签: c# generics default-value


    【解决方案1】:

    您正在寻找 default 关键字。

    例如,在您给出的示例中,您需要以下内容:

    class MyEmptyDictionary<K, V> : IDictionary<K, V>
    {
        bool IDictionary<K, V>.TryGetValue (K key, out V value)
        {
            value = default(V);
            return false;
        }
    
        ....
    
    }
    

    【讨论】:

    • 刚刚尝试使用“默认”,直到升级到 C# 7.1 才意识到我不能。
    • @BrettRigby 默认在 C#2 中可用。在 C#1(Visual Studio 中的 ISO-1)中使用 default(int) 运行一个空的 CLI 项目会得到这个错误:Program.cs(11,31,11,38): error CS8022: Feature 'default operator' is not available in C# 1. Please use language version 2 or greater. 但是使用C#2 (ISO-2) 或更高版本可以正常工作。
    • @BrettRigby 但是,如果您的意思是使用value = default,那么您需要C# 7.1
    【解决方案2】:
    default(T)
    

    【讨论】:

      【解决方案3】:
      return default(int);
      
      return default(bool);
      
      return default(MyObject);
      

      所以在你的情况下你会写:

      class MyEmptyDictionary<K, V> : IDictionary<K, V>
      {
          bool IDictionary<K, V>.TryGetValue (K key, out V value)
          {
              ... get your value ...
              if (notFound) {
                value = default(V);
                return false;
              }
          }
      
      ....
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 1970-01-01
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多