2014-05-15 74 views
1

我有以下投:当枚举未设置时会发生什么?

int myInteger = (int)myItem.EnumValue; 

当枚举是:

public enum EnumValue 
{ 
    Yes= 0, 
    No = 1 
} 

从我的观察看来,当未设置上myItem的EnumValue,EnumValue的值是默认设置到是,随后投射到0.

为什么enum不为空?我的观察是否正确,为何如此?

回答

2

因为枚举变量本质上是一个枚举基础类型的变量。默认情况下它是整数。整数不能有空值。

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

1

为什么enum不为空?

因为enum是一个值类型,它永远不会是null

+0

那么,downvoter你有话要说? –

1

基础类型枚举的是总是一体。从the docs

每个枚举类型都有一个基本类型,其可以是除炭任何 整数类型。枚举 元素的默认基础类型为int。

因为你的是基于int,枚举的默认值是一个整数的默认值 - 这是零。

2

几个答案建议使用一个可为空的枚举,但你也可以建立类似的逻辑,为你的枚举没有空类型的开销:

public enum EnumValue 
{ 
    Unknown = 0, 
    Yes = 1, 
    No = 2 
} 

由于枚举的默认值是0,默认值是Unknown 。请注意,即使您没有定义值为零的字段,默认值为零,如下所示:

public enum EnumValue 
{ 
    Yes = 1, 
    No = 2 
} 
相关问题