在以下枚举类中,None = 1是什么?

Sra*_*mar 9 c# enums

我在浏览一些示例代码时注意到以下枚举声明.None = 1是什么意思?

public enum ButtonActions
{
    None = 1,        
    Clear,
    Insert,       
    Delete,
    Cancel,
    Close
}
Run Code Online (Sandbox Code Playgroud)

小智 35

它标记了值None,然后所有后续值从那时起隐含地向上计数:

Clear将是2
Insert将3
...

通常,没有任何标记,enums默认从0开始向上计数.

附注:您随时可以指定新的"起始"值,并重新开始排序.例如:

public enum ButtonActions
{
    None = 1,        
    Clear,
    Insert,       
    Delete = 7,
    Cancel,
    Close
}
Run Code Online (Sandbox Code Playgroud)

现在,它将是:

None:1
Clear:2
Insert:3
Delete:7
Cancel:8
Close:9

在C#中,enums是底层整数类型的强类型命名常量集.即使它们是他们自己的类型和他们自己的方法,在窗帘下面它只是数字.当你比较一个enum时,它或多或少是一个完整的比较.

他们设计了这样一种方式,它不是绝对必要知道或关心实际数字命名常量表示-这其实就是为什么他们存在于一切,让你不写3,并5在代码中随处可见.但这并没有改变这样一个事实,即每个命名常量最终会映射到一个数字,所以在很多情况下,对这些数字精确控制它们各自所代表的数字是很好的.


Son*_*nül 5

MSDN;

默认情况下,枚举中每个元素的基础类型是int.

以下是使用枚举而不是数字类型的优点:

  • 您明确指定客户端代码哪些值对变量有效.

  • 在Visual Studio中,IntelliSense列出已定义的值.

如果未指定枚举器列表中元素的值,则值将自动递增1.创建枚举时,选择最逻辑的默认值并将其赋值为零.如果在创建时未明确指定值,则会导致所有枚举具有该默认值.

我相信最重要的部分之一就是为什么我们使用这些值是位标志.与FlagsAttribute您一起使用可以在枚举元素上使用AND,OR,NOTXOR等按位运算.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;
}
Run Code Online (Sandbox Code Playgroud)