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

如何将枚举与其他选项一起使用(全部、无)

  •  7
  • sventevit  · 技术社区  · 14 年前

    我有一个枚举,它:

    • 作为一种财产包括在我的班级里
    • 它表示数据库表中的一些值(两种类型)
    • 它显示在Dropbox中,因此可以用作过滤器

    现在,我想将“全部”(例如“无”)值添加到此Dropbox。

    我该怎么做:

    • 是否将“all”值添加到枚举?
    • 将“all”值添加到Dropbox,将我的属性类型从枚举更改为字符串
    • 其他选择…
    3 回复  |  直到 7 年前
        1
  •  6
  •   João Angelo    14 年前

    codesleuth对另一个答案的评论让我再次阅读这个问题,这里有一个更新。

    考虑使用 flags enumeration 如果您要有多个组合,在您的例子中,这意味着选择任何类型组合都是有效的输入。

    [Flags]
    enum MyTypes
    {
        None = 0,
        One = 1,
        Two = 2,
        Three = 4,
        Four = 8,
        All = One | Two | Three | Four
    }
    

    如果用户只能选择一种类型或所有类型,则使用普通枚举:

    enum MyType
    {
        None,
        One,
        Two,
        Three,
        Four,
        All
    }
    
        2
  •  2
  •   Thomas Weller    14 年前

    imho,最好像这样向枚举中添加“all”值:

    enum SampleEnum 
    {
        Value1 = 1,
        Value2 = 2,
        Value3 = 4,
        All = Value1 | Value2 | Value3 
    }
    

    这样,您就不必关心组合框中显示的项目,并且可以对代码中该值的选择做出反应(如果需要的话)。

        3
  •  1
  •   Ofir    12 年前

    我还有一个诀窍,你可以在我的博客上看看: Enum Trick

    最佳实践是将“无”或“未知”包括为零(0)。

    “all”是一个计算值,作为所有值的总和。

    [Flags]
    public enum MyTypes
    {
        None = 0,
        One = 1,
        Two = 2,
        Three = 4,
        Four = 8,
        Last,
        All = (Last << 1) - 3,
    }
    

    现在,当您添加值时,“all”也会更新(不需要更改)。