参考链接:https://blog.csdn.net/jiuzaizuotian2014/article/details/80429594

c#枚举类型的初始值

原创jiuzaizuotian2014 最后发布于2018-05-24 09:35:44 阅读数 4230 收藏

C#枚举类型的默认值为0,如果在使用过程中没有给枚举类型的变量赋值,则系统会自动默认赋值为0,而不是null,非常需要注意。最好在定义枚举类型变量的时候赋初值,否则不小心就容易出错。

本来还以为是定义的枚举类型中的第一个值,但不一定如此,只有第一个值定义为0值的时候才是,其它都不是。

无论自己定义的枚举类型是否包含定义了0值,枚举类型的默认值都是0。这个结论与在enum类型定义时是否定义了0值、定义的0值所在位置都没有关系。有0值的话,无论其在enum定义中的顺序放在哪里,程序都把0值认为是自己的默认值。

枚举类型变量要得到其数值,直接用 (int)enumVariable进行强制转换就可以,要得到字符串字面量,用ToString()方法即可。

(一)测试代码如下:

public enum NameEnum
{
Zhang=0,
Li=1,
Wang=2
}
static void Main(string[] args)
{
NameEnum theName = default(NameEnum);
Console.WriteLine(theName);
Console.WriteLine((int)theName);
Console.Read();
}
测试结果为:

Zhang
0
(二)测试代码如下

public enum NameEnum
{
Zhang=1,
Li=2,
Wang=3
}
private static void EnumTest()
{
NameEnum theName=default(NameEnum);
Console.WriteLine(theName);
Console.Read();
}
测试结果为:

0
0
(三)测试代码如下:

public enum NameEnum
{
Zhang=1,
Li=0,
Wang=2
}
static void Main(string[] args)
{
NameEnum theName = default(NameEnum);
Console.WriteLine(theName);
Console.Read();
}
测试结果为:

Li
0
(四)测试代码如下

public enum NameEnum
{
Zhang, //对于为明确给出数值的,第一个就是0值
Li,
Wang
}
static void Main(string[] args)
{
NameEnum theName = default(NameEnum);
Console.WriteLine(theName);
Console.Read();
}
测试结果为:

Zhang
0
(五)更多的测试

public enum NameEnum
{
Zhang=1,
Li=2,
Wang=3
}
class Program
{
static NameEnum sName;
static void Main(string[] args)
{
//用new初始化
NameEnum name = new NameEnum();
Console.WriteLine((int)name);
//用default初始化
NameEnum name1 = default(NameEnum);
Console.WriteLine((int)name1);
//sName是成员变量,由系统默认初始化
Console.WriteLine((int)sName);
Console.WriteLine(“以下输出所有定义的成员”);
Array a = Enum.GetValues(typeof(NameEnum));
foreach(var i in a)
{
Console.WriteLine((int)i);
Console.WriteLine(i); //相当于Console.WriteLine(i.ToString())
}
Console.Read();
}
}
测试结果如下:

0
0
0
以下输出所有定义的成员
1
Zhang
2
Li
3
Wang
补充:写完这边博文后,又发现了MachiealFactory的博客解释得更加清楚,该博客得链接为https://blog.csdn.net/xiaominggunchuqu/article/details/77991602
————————————————
版权声明:本文为CSDN博主「jiuzaizuotian2014」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiuzaizuotian2014/article/details/80429594