来自C#5.0规范
6.1.3隐式枚举转化
隐式枚举转换允许 decimal-integer-literal 0 转换为任何枚举类型和 任何可为空的类型,其底层类型是枚举类型。在后者 case通过转换为底层来评估转换 枚举和包装结果(§4.1.10)。
“decimal-integer-literal 0”是否表示整数值0?
如果是,为什么隐式枚举转换不允许将其他整数值(如1,2,3,...)转换为任何枚举类型?
感谢。
答案 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的评论中的链接(上面的问题)。