关于c#枚举中,给成员赋常量值后,调用出现的问题

新手提问,C#中,尝试给枚举成员赋予常数值,如下所示:

public enum date : byte
    {
        Monday = 10,
        Tuesday = 9,
        Wednesday

    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Convert.ToString(date.Monday));
        }
    }

此时是正常输出Monday的;但如果此时我再在枚举列表中,再加一个枚举成员:

新加了个成员Thursday

此时输出的就变成了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复制冲突,因此出错,建议按顺序从小到大赋值,或默认赋值。