在浏览一些示例代码时,我注意到了以下枚举声明。无=1 是什么意思?
public enum ButtonActions
{
None = 1,
Clear,
Insert,
Delete,
Cancel,
Close
}
它标记 的值None
,然后所有后续值从那时起隐式向上计数:
Clear
将是 2
Insert
将是 3
...
通常,没有任何标记,enum
s 默认从 0 开始并向上计数。
旁注:您始终可以随时指定新的“起始”值,然后重新开始排序。例如:
public enum ButtonActions
{
None = 1,
Clear,
Insert,
Delete = 7,
Cancel,
Close
}
现在,它将是:
None
: 1
Clear
: 2
Insert
: 3
Delete
: 7
Cancel
: 8
Close
: 9
在 C# 中, s 是用于基础整数类型enum
的强类型命名常量集。尽管他们是他们自己的类型,有自己的方法,但在窗帘下,都是数字。当您将一个与另一个进行比较时,它或多或少是一种整体比较。enum
它们的设计方式使得不必知道或关心命名常量所代表的实际数字 - 这实际上就是它们存在的原因,因此您无需在任何地方编写3
代码5
。但这并没有改变每个命名常量最终都映射到一个数字的事实,因此在许多情况下,能够精确地控制它们各自代表的数字是很好的。
从MSDN
;
默认情况下,枚举中每个元素的基础类型是int。
以下是使用枚举而不是数字类型的优点:
您清楚地为客户端代码指定哪些值对变量有效。
在 Visual Studio 中,IntelliSense 列出了定义的值。
当您没有为枚举器列表中的元素指定值时,这些值会自动增加1。创建枚举时,选择最符合逻辑的默认值并将其赋值为零。如果在创建枚举时没有显式分配值,这将导致所有枚举都具有该默认值。
我相信最重要的部分之一是为什么我们使用这些值是位标志。与FlagsAttribute
您一起使用可以在枚举元素上使用AND、OR、NOT和XOR等按位运算。页面示例MSDN
;
[Flags]
enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
class MyClass
{
Days2 weekends = Days2.Sunday | Days2.Saturday;
}
通常,当您制作enum
它们时,它们表示为int
从 0 开始。
我不太确定,但也许这样枚举将从 1 开始。您可以通过简单的“if( None == 1
)”来尝试它并检查返回值。
正如我所说,我不是 100% 确定,但你可以试试。
这只是意味着您可以参考使用
ButtonActions bt = ButtonActions.None;
或者
ButtonActions bt = (ButtonActions)1;
这用于强制枚举从 1 而不是 0 开始计数。