C# 隐式枚举转换转换什么?
来自C#5.0规范 6.1.3隐式枚举转换 隐式枚举转换允许 要转换为任何枚举类型并转换为 基础类型为枚举类型的任何可空类型。在后者 案例转换通过转换到基础 枚举类型并包装结果(§4.1.10) “十进制整数文字0”是指整数值0吗 如果是,为什么隐式枚举转换不允许其他整数值,如1、2、3、。。。要转换为任何枚举类型吗C# 隐式枚举转换转换什么?,c#,C#,来自C#5.0规范 6.1.3隐式枚举转换 隐式枚举转换允许 要转换为任何枚举类型并转换为 基础类型为枚举类型的任何可空类型。在后者 案例转换通过转换到基础 枚举类型并包装结果(§4.1.10) “十进制整数文字0”是指整数值0吗 如果是,为什么隐式枚举转换不允许其他整数值,如1、2、3、。。。要转换为任何枚举类型吗 谢谢。是的,它的意思是文字0。例如: static void Main() { Method(0); } static void Method(DayOfWeek dow)
谢谢。是的,它的意思是文字
0
。例如:
static void Main()
{
Method(0);
}
static void Method(DayOfWeek dow)
{
Console.WriteLine(dow);
}
应在控制台上打印Sunday
。如果将0
更改为1
,则该程序是非法的(编译时错误)
只有(编译时常量)零具有到枚举类型的隐式转换。对于其他值,需要显式强制转换,如方法((DayOfWeek)1)代码>
编辑:这说明了规则是如何定义的。如果你想知道他们为什么选择这些规则,我推荐Damien_the_unsiver and CodeCaster在评论中的链接。Eric的答案似乎很好,“十进制整数文字0”是否意味着整数值0?”它意味着文字零值,即0
。所以不是一个可以有零值的变量。另一个问题是重复的。@DStanley-您链接的重复对象似乎与此处的问题方向相反。我想他们是在问为什么零转换仅限于0。@Damien_这个不信的人很公平。我将重新打开。?并没有真正回答为什么要特别处理0。但我想这已经通过提供的链接解决了;我补充了一条评论。