public enum Rank
    {
        First,
        Second,
        Third
    }
 class Program
    {
        static void Main(string[] args)
        {
            Rank r = 0; //没错
            Rank rr = 1;//有错,为什么??????????
         }
}请帮忙解答,谢谢。

解决方案 »

  1.   

    Rank rr = (Rank)1;
      

  2.   

    要加类型转换的 Rank rr=(Rank)1;
      

  3.   

    因为0是所有未赋值的值类型的默认值...enum成员如果没有显式指定值,默认为第一个枚举成员赋0值...也因此...MSDN中明确规定:创建枚举时,应选择最合理的默认值并赋给它一个零值。这便使得只要在创建枚举时未为其显式赋值,则所创建的全部枚举都将具有该默认值。
      

  4.   


    Rank rr = (Rank)1;
      

  5.   

    学习了
    但是如果:
    public enum Rank
        {
            First=1,
            Second,
            Third
        }
     class Program
        {
            static void Main(string[] args)
            {
                Rank r = 0; //0不是枚举成员值,也没有检查。我知道如果枚举对应的值如果枚举中没
                                //有,输出则是对应的Int32 0 
              }
    }
      

  6.   

    当然不检查...5楼说的还不清楚吗?值类型不可为null,必须有值,默认就是0...所以才有设计准则...一定要在简单枚举中提供一个零值。如果可能,将此值命名为 None。如果 None 不适合,请将零值赋给最常用的值(默认值)。你这种只能属于设计不合规范,问题代码...
      

  7.   

    谢谢各位了,Rank rr=(Rank)1;这个我知道的,我就是不太清楚为什么0可以直接给,而1就不行。给分结贴了。谢谢各位了。