我有以下投:当枚举未设置时会发生什么?
int myInteger = (int)myItem.EnumValue;
当枚举是:
public enum EnumValue
{
Yes= 0,
No = 1
}
从我的观察看来,当未设置上myItem的EnumValue,EnumValue的值是默认设置到是,随后投射到0.
为什么enum不为空?我的观察是否正确,为何如此?
我有以下投:当枚举未设置时会发生什么?
int myInteger = (int)myItem.EnumValue;
当枚举是:
public enum EnumValue
{
Yes= 0,
No = 1
}
从我的观察看来,当未设置上myItem的EnumValue,EnumValue的值是默认设置到是,随后投射到0.
为什么enum不为空?我的观察是否正确,为何如此?
Enum
是值类型,所以就像int
和其他值类型一样,它们不能为空。相反,它们的默认值相当于0(因为您已将枚举值Yes
分配为0,这是此例中的默认值)。
如果您想要一个可为空的枚举,请使用Nullable<EnumValue>
或EnumValue?
。
进一步阅读
因为枚举变量本质上是一个枚举基础类型的变量。默认情况下它是整数。整数不能有空值。
UPDATE:Under hood枚举貌似
class public auto ansi sealed EnumValue extends [mscorlib]System.Enum
{
.field public static literal EnumValue Yes = int32(0x00000000)
.field public static literal EnumValue No = int32(0x00000001)
.field public specialname rtspecialname int32 value__
}
即它是一组常量(在编译过程中内联)和整数(默认情况下)包含枚举值的字段。这就是为什么你可以将任何整数值分配给变量EnumValue
类型。这就是为什么它默认值为0
。这就是为什么它不能是null
。
为什么enum不为空?
因为enum
是一个值类型,它永远不会是null
。
基础类型枚举的是总是一体。从the docs:
每个枚举类型都有一个基本类型,其可以是除炭任何 整数类型。枚举 元素的默认基础类型为int。
因为你的是基于int,枚举的默认值是一个整数的默认值 - 这是零。
几个答案建议使用一个可为空的枚举,但你也可以建立类似的逻辑,为你的枚举没有空类型的开销:
public enum EnumValue
{
Unknown = 0,
Yes = 1,
No = 2
}
由于枚举的默认值是0,默认值是Unknown
。请注意,即使您没有定义值为零的字段,默认值为零,如下所示:
public enum EnumValue
{
Yes = 1,
No = 2
}
那么,downvoter你有话要说? –