9

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

public enum ButtonActions
{
    None = 1,        
    Clear,
    Insert,       
    Delete,
    Cancel,
    Close
}
4

4 回答 4

35

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

Clear将是 2
Insert将是 3
...

通常,没有任何标记,enums 默认从 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但这并没有改变每个命名常量最终都映射到一个数字的事实,因此在许多情况下,能够精确控制它们各自代表的数字是很好的。

于 2013-05-29T06:27:30.123 回答
5

MSDN;

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

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

  • 您清楚地为客户端代码指定哪些值对变量有效。

  • 在 Visual Studio 中,IntelliSense 列出了定义的值。

当您没有为枚举器列表中的元素指定值时,这些值会自动增加1。创建枚举时,选择最符合逻辑的默认值并将其赋值为零。如果在创建枚举时没有显式分配值,这将导致所有枚举都具有该默认值。

我相信最重要的部分之一是为什么我们使用这些值是位标志。与FlagsAttribute您一起使用可以在枚举元素上使用ANDORNOTXOR等按位运算。页面示例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;
}
于 2013-05-29T06:32:58.340 回答
0

通常,当您制作enum它们时,它们表示为int从 0 开始。

我不太确定,但也许这样枚举将从 1 开始。您可以通过简单的“if( None == 1)”来尝试它并检查返回值。

正如我所说,我不是 100% 确定,但你可以试试。

于 2013-05-29T06:30:26.693 回答
0

这只是意味着您可以参考使用

ButtonActions bt = ButtonActions.None;

或者

ButtonActions bt = (ButtonActions)1;

这用于强制枚举从 1 而不是 0 开始计数。

于 2013-05-29T06:39:09.010 回答