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