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

使用枚举类型。无,或可为null的<EnumType>?

  •  0
  • thecoop  · 技术社区  · 15 年前

    在这种情况下,我应该使用零吗 None 枚举值,或使属性类型可为null?

    public MyEnum Property { get; set; }
    
    public enum MyEnum {
        None = 0,
        Value1,
        Value2
    }
    

    public MyEnum? Property { get; set; }
    
    public enum MyEnum {
        Value1,
        Value2
    }
    
    4 回复  |  直到 15 年前
        1
  •  6
  •   Oded    15 年前

    使用 MyEnum.None MyEnum.Invalid

    也可以将其设置为0以外的其他值-因为它基于int,所以可以将其设置为-1,并将第一个有效值设置为1:

    public enum MyEnum {
        InvalidValue = -1,
        Value1 = 1,
        Value2
    }
    

    在代码中,您可以轻松地检查传入的这个值,并抛出一个描述性异常。

    不需要可为null的枚举类型,且其表达能力较差。它要求代码的用户意识到这一点并检查空值。

        2
  •  0
  •   Matt Greer    15 年前

    很难得出结论,你的应用程序中有很多因素会影响这一点。我倾向于只将枚举值定义为0,而不在枚举中指定零值。

    enum Foo 
    {
       A = 1,
       B = 2
    }
    
    ...
    
    Foo myFoo = (Foo)0;
    

    这提供了sentinel值的好处,而不会污染枚举。

        3
  •  0
  •   Adam Lear    15 年前

    if(Property == MyEnum.None) 要比 if(Property == null) .

        4
  •  0
  •   Jerod Houghtelling    15 年前

    另一个选项是将第一个值设置为1,因为它最初是0。

    public enum MyEnum {
        Value1 = 1,
        Value2
    }
    

    我认为你的情况都可以接受!这将取决于你的情况。使用用户界面时,第一个带有“None”值的示例 有可能 更容易使用。但是,Nullable提供了有关如何使用变量的更多信息。