为什么默认枚举值为0而不是最小值?

use*_*ame 16 c# enums

在C#中将'0'作为枚举的默认值有什么意义?如果我声明以不同数字开头的枚举:

enum Color
{
   Blue = 1,
   Green,
   Red,
}
Run Code Online (Sandbox Code Playgroud)

然后var color = default(Color)- 将返回'0'.我希望看到最小值.如果枚举的每个成员对应于某个特定数字并且"0"不是有效值,则此行为可能会导致问题.

Ale*_*kov 12

所有值类型(包括枚举)的默认值都是按位0.因此,即使未明确定义,它也意味着0始终是枚举的可能值.

这是规范:默认值表

编辑:有关更多详细信息,请检查MSDN的枚举类型 - 枚举

枚举是一种特殊的类型,它的排序方式是从其他值类型(通常不可能)派生,但行为作为其支持类型的值类型.枚举只能使用一些整数值作为支持类型.

注意:正如@a​​rchil指出的,枚举值可以包含任何支持类型的值,而不管枚举本身枚举的常量列表如何.对于标有"FlagsAttribute"的枚举,通常需要此行为,但对于普通枚举,它可能不直观.


Dan*_*n J 10

我们只能猜测为什么 .NET框架的某个方面是以某种方式设计的.对于最直接的解释,我想在MSDN文档中强调这一说法:

枚举是一组命名常量,其基础类型是除Char之外的任何整数类型.如果未显式声明基础类型,则使用Int32.

请注意,.NET枚举本质上是整数类型的扩展.整数类型的默认值为0,因此枚举继承该行为是合理的(如果在您说明的情况下有些不方便).


arc*_*hil 7

枚举总是有可能存在不存在的价值.这就是Enum.IsDefined Method存在的原因.

枚举E的默认值是表达式(E)0产生的值.