隐式枚举转换转换了什么?

时间:2017-06-08 14:25:50

标签: c#

来自C#5.0规范

  

6.1.3隐式枚举转化

     

隐式枚举转换允许   decimal-integer-literal 0 转换为任何枚举类型和   任何可为空的类型,其底层类型是枚举类型。在后者   case通过转换为底层来评估转换   枚举和包装结果(§4.1.10)。

“decimal-integer-literal 0”是否表示整数值0?

如果是,为什么隐式枚举转换不允许将其他整数值(如1,2,3,...)转换为任何枚举类型?

感谢。

1 个答案:

答案 0 :(得分:-1)

是的,这意味着文字0。例如:

static void Main()
{
   Method(0);
}

static void Method(DayOfWeek dow)
{
  Console.WriteLine(dow);
}

应将Sunday打印到控制台。如果将0更改为1,则该程序是非法的(编译时错误)。

只有(编译时常量)零对隐式转换为枚举类型。对于其他值,您需要使用显式强制转换,如Method((DayOfWeek)1);中所示。

编辑:这解释了规则是如何实现的。如果您想知道为什么他们选择了这些规则,我推荐Damien_The_Unbeliever和CodeCaster的评论中的链接(上面的问题)。