在C#中,枚举标志必须是顺序的吗?或者你能留下空白吗?并仍然执行逐位比较?即,你能做到以下几点:
[Flags]
public enum MyEnum
{
None = 0,
IsStarred = 1,
IsDone = 128
}
答案 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