我在浏览一些示例代码时注意到以下枚举声明.None = 1是什么意思?
public enum ButtonActions
{
None = 1,
Clear,
Insert,
Delete,
Cancel,
Close
}
Run Code Online (Sandbox Code Playgroud)
小智 35
它标记了值None
,然后所有后续值从那时起隐含地向上计数:
Clear
将是2
Insert
将3
...
通常,没有任何标记,enum
s默认从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#中,enum
s是底层整数类型的强类型命名常量集.即使它们是他们自己的类型和他们自己的方法,在窗帘下面它只是数字.当你比较一个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;
}
Run Code Online (Sandbox Code Playgroud)