Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 枚举未设置时会发生什么情况?_C#_Casting_Enums - Fatal编程技术网

C# 枚举未设置时会发生什么情况?

C# 枚举未设置时会发生什么情况?,c#,casting,enums,C#,Casting,Enums,我的演员阵容如下: int myInteger = (int)myItem.EnumValue; 其中,枚举为: public enum EnumValue { Yes= 0, No = 1 } 根据我的观察,当myItem上的EnumValue未设置时,EnumValue的值默认设置为Yes,然后强制转换为0 为什么枚举不为空?我的观察结果正确吗?为什么正确?因为枚举变量本质上是枚举基础类型的变量。默认情况下,它是整数。整数不能有空值 更新:枚举看起来像 class p

我的演员阵容如下:

int myInteger = (int)myItem.EnumValue;
其中,枚举为:

public enum EnumValue
{
     Yes= 0,
     No = 1
}
根据我的观察,当myItem上的EnumValue未设置时,EnumValue的值默认设置为Yes,然后强制转换为0


为什么枚举不为空?我的观察结果正确吗?为什么正确?

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

更新:枚举看起来像

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
是一种值类型,它永远不能为
null

enum
是值类型,所以就像
int
和其他值类型一样,它们不能为null。相反,它们的默认值相当于0(因为您已将
Yes
的枚举值指定给0,这是本例中的默认值)

如果您想要一个可为空的枚举,请使用
nullable
或简称
EnumValue?

进一步阅读


枚举的基本类型始终是整数。发件人:

每个枚举类型都有一个基础类型,可以是任何类型 除char之外的整型。枚举的默认基础类型 元素是int


由于您的枚举是基于int的,因此枚举的默认值是整数的默认值,即零。

一些答案建议使用可为空的枚举,但您也可以在枚举中构建类似的逻辑,而不需要可为空类型的开销:

public enum EnumValue
{
     Unknown = 0,
     Yes = 1,
     No = 2
}
由于枚举的默认值为0,因此默认值为
Unknown
。请注意,即使未定义值为零的字段,默认值也为零,如下所示:

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