C#enum标志必须是顺序的

时间:2012-02-07 21:20:13

标签: c# .net enums

在C#中,枚举标志必须是顺序的吗?或者你能留下空白吗?并仍然执行逐位比较?即,你能做到以下几点:

[Flags]
public enum MyEnum
{
    None = 0,
    IsStarred = 1,
    IsDone = 128
}

8 个答案:

答案 0 :(得分:7)

没有什么要求它们是连续的。

你的枚举定义很好,编译没有问题。

然而,可读性问题和最不惊讶的原则已经大大受损......

答案 1 :(得分:5)

您发布的代码没有任何问题。这绝对没问题:

[Flags]
public enum MyEnum
{
    None = 0,
    IsStarred = 1,
    IsDone = 128
}

这就是:

[Flags]
public enum MyEnum
{
    IsStarred = 1,
    IsDone = 128
    None = 0,
    SomethingElse = 4,
}

请记住,FlagsAttribute不会将您的值强制为位掩码。

答案 2 :(得分:4)

没有这样的要求。假设你大写[Flags],你所拥有的是好的。

答案 3 :(得分:4)

它们不一定是连续的。

答案 4 :(得分:3)

是的,你可以这样做。这取决于你。

答案 5 :(得分:1)

不,他们不一定要顺序。编译代码并亲自查看

答案 6 :(得分:1)

您不仅可以这样做,还可以这样做:

public enum MyEnum
{
    None,
    IsStarred,
    IsDone = 128
}

public enum MyEnum
{
    None = 5,
    IsStarred,
    IsDone = 128
}

这是一个指向更多示例的链接:http://www.dotnetperls.com/enum

答案 7 :(得分:0)

Squental enums不需要Flags属性。但这是一种最佳做法。您可以在此处阅读更多内容:http://msdn.microsoft.com/en-us/library/ms229062.aspx