来自C# 5.0规范
6.1.3隐式枚举转换 隐式枚举转换允许将十进制整数-文字0转换为任何枚举类型和基础类型为枚举类型的任何可空类型。在后一种情况下,转换是通过转换到基础枚举类型并包装结果来计算的(§4.1.10)。
“十进制-整数-文字0”是指整数值0吗?
如果是,为什么隐式枚举转换不允许其他整数值,如1,2,3,…被转换成任何枚举类型?
谢谢。
发布于 2017-06-08 17:13:02
是的,它的意思是字面0。例如:
static void Main()
{
Method(0);
}
static void Method(DayOfWeek dow)
{
Console.WriteLine(dow);
}应该将Sunday打印到控制台。如果将0转换为1,则程序是非法的(编译时错误)。
只有(编译时常数)零有一个隐式转换到枚举类型。对于其他值,您需要显式的强制转换,如在Method((DayOfWeek)1);中。
编辑:这解释了规则是怎样的。如果您想知道他们为什么选择这些规则,我推荐Damien_The_Unbeliever和CodeCaster在评论中的链接(指向上面的问题)。
https://stackoverflow.com/questions/44438443
复制相似问题