新手提问,C#中,尝试给枚举成员赋予常数值,如下所示:
public enum date : byte
{
Monday = 10,
Tuesday = 9,
Wednesday
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Convert.ToString(date.Monday));
}
}
此时是正常输出Monday的;但如果此时我再在枚举列表中,再加一个枚举成员:
此时输出的就变成了Wednesday:
想知道是什么原因,感谢!
首先不应以图片的格式展示你的运行结果,最好以代码片格式展示。
这和C#枚举的赋值机制有关:
在枚举的内部,它的每个元素都关联(对应)着一个整数值。默认情况下,第一个对应整数 0,以后每个元素所对应的整数都递增 1。
因此Wednesday的值会在Tuesday的值上+1,通过测试程序可以帮助你更直观的理解这一机制:
public enum WeekDate : byte
{
Monday = 10,
Tuesday = 9,
Wednesday,
Thursday,
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine((int)WeekDate.Monday);
Console.WriteLine((int)WeekDate.Tuesday);
Console.WriteLine((int)WeekDate.Wednesday);
Console.WriteLine((int)WeekDate.Thursday);
}
}
结果如下:
10
9
10
11
所以在使用枚举时为了避免出问题,要么不做人工赋值,要么都做人工赋值。
默认情况下,枚举列表中的符号将被赋给整数值 0、1、2 等等.如果在赋值时省略了一个或多个符号,则它们将被赋给一个默认值,来看以下 2 个示例:
【示例 1】
enum Colors { red, orange, yellow = 9, green, blue };
在该示例中,命名常量 red 将被赋值为 0,orange 将为 1,yellow 将为 9,green 将为 10,blue 将为 11。
因此,你的程序中,实际上:
Monday = 10,
Tuesday = 9,
Wednesday=10,
Thursday=11
Monday和Wednesday复制冲突,因此出错,建议按顺序从小到大赋值,或默认赋值。