class Program
    {
        static void Main(string[] args)
        {
            A a = 0; //正确
            Console.WriteLine(a);
            A b = 1; //错误
            Console.WriteLine(b);
        }
    }
    public enum A
    { 
        A,B,C
    } 谁帮我解释解释?
为什么只有赋值0 不用强制转换? 还有   public enum A
    { 
        A=1,B,C
    } 枚举是这样的时候   A a=0; 也不报错,但是 console.writeline(a); 的结果是0  应该报错啊 哪位高手大哥给解释下啊

解决方案 »

  1.   

    枚举类型的应用主要是防止手动输入错误值。
    定义时 给
    枚举元素的默认基础类型为int 默认情况下,第一个枚举元素的值为0,后面每个枚举元素的值依次递增1 。如 
    emum weekday{sun,mon,tue,wed,thu,fri,sat},在此枚举中,sun的值为0 ,mon为1 以此类推。也可emum weekday{sun=1,mon,tue,wed=sun,thu,fri,sat},强制第一个枚举元素sun的值为1,mon为2,tue为3,而wed又强制为1,依次类推。 
    在调用时改变其值
     
                A a = 0; //正确 
                Console.WriteLine(a); 
                A b = 1; //错误 
                Console.WriteLine(b); 
               
          重新赋值应该为:  
                A.A = 1;
                A.B = 2;......
    应用时,
          int X = A.B;  //得到 X = 2
      

  2.   

    sorry! 看错了    重新赋值应该为:  
                A.A = 1; 
                A.B = 2;...... 
    应用时, 
          int X = A.B;  //得到 X = 2 枚举在定义时赋值
    应用时
    int X = Convert.ToInt32(A.B);//得到 X = 2 
      

  3.   

    http://geekswithblogs.net/chrishan/archive/2006/07/24/86123.aspx
    看老外的说法
    lz说是bug
    C# bug: you are able to pass in 0 which is out of the scope of enuPath
    他意思是enuPath里没有枚举值是0的值,但是传参enuPath EnuPath却传入了0,而且编译和运行通过了这里然后进入了判断逻辑
    有一个家伙不同意
    0 is the default/initial value, and is not subject to the typecast requirement. 
    他说0是缺省值,而且不需要显示地类型转换