【问题标题】:Default values for enums using the default keyword?使用 default 关键字的枚举的默认值?
【发布时间】:2010-09-22 22:44:25
【问题描述】:

任何人都知道使用默认关键字的枚举的默认值,如下所示:

MyEnum myEnum = default(MyEnum);

它会是第一个项目吗?

【问题讨论】:

    标签: c# .net enums


    【解决方案1】:

    这是(myEnum)0产生的值。例如:

    enum myEnum
    {
      foo = 100
      bar = 0,
      quux = 1
    }
    

    然后default(myEnum) 将是myEnum.bar 或者如果有多个值为 0 的成员,则枚举的第一个值为 0 的成员。

    如果没有为枚举的任何成员(显式或隐式)分配值 0,则值为 0

    【讨论】:

    • 谢谢,但是如果没有定义 0 怎么办?但他们是 100、99 和 1?
    • 那么它是 0。我相应地更新了我的答案。查看相关主题:stackoverflow.com/questions/529929/…
    • 如果没有定义 0,则该值仍为 0。请记住,枚举实际上只是一个围绕整数类型的瘦类型安全包装器,使您能够按名称引用整数值。
    • 谢谢,所以如果没有枚举0,你的意思是分配的值真的是0,如int(0)?
    • @Jim:现在从你的评论中得到它。
    【解决方案2】:

    您的问题有点难以理解,但枚举的默认值为零,这可能是也可能不是枚举的有效值。

    如果您希望default(MyEnum) 成为第一个值,您需要像这样定义您的枚举:

    public enum MyEnum
    {
       First = 0,
       Second,
       Third
    }
    

    【讨论】:

      【解决方案3】:

      表达式default(T) 相当于为泛型参数或具体类型enum(T)0。无论enum 是否定义了数值为 0 的条目,这都是正确的。

      enum E1 {
        V1 = 1;
        V2 = 2;
      }
      
      ...
      
      E1 local = default(E1);
      switch (local) {
        case E1.V1:
        case E1.V2:
          // Doesn't get hit
          break;
        default:
          // Oops
          break;
      }
      

      【讨论】:

        【解决方案4】:

        把这个打到 vs2k10 中.....

        与:

         enum myEnum
         {
          a = 1,
          b = 2,
          c = 100
         };
        
        
        
         myEnum  z = default(en);
        

        产生:z == 0,它可能是也可能不是您的枚举的有效值(在这种情况下,它不是)

        这样说视觉工作室 2k10

        【讨论】:

          猜你喜欢
          • 2015-08-22
          • 2011-10-27
          • 1970-01-01
          • 1970-01-01
          • 2016-10-10
          • 1970-01-01
          • 2016-05-08
          • 2011-10-14
          • 1970-01-01
          相关资源
          最近更新 更多