C# 隐式枚举转换转换什么?

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)

来自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)
{
  Console.WriteLine(dow);
}
应在控制台上打印
Sunday
。如果将
0
更改为
1
,则该程序是非法的(编译时错误)

只有(编译时常量)零具有到枚举类型的隐式转换。对于其他值,需要显式强制转换,如
方法((DayOfWeek)1)


编辑:这说明了规则是如何定义的。如果你想知道他们为什么选择这些规则,我推荐Damien_the_unsiver and CodeCaster在评论中的链接。

Eric的答案似乎很好,“十进制整数文字0”是否意味着整数值0?”它意味着文字零值,即
0
。所以不是一个可以有零值的变量。另一个问题是重复的。@DStanley-您链接的重复对象似乎与此处的问题方向相反。我想他们是在问为什么零转换仅限于0。@Damien_这个不信的人很公平。我将重新打开。?并没有真正回答为什么要特别处理0。但我想这已经通过提供的链接解决了;我补充了一条评论。