C#enum - 为什么*隐式*从0投射?

Cri*_*scu 9 c# enums compiler-errors

拿这段代码:

enum En {
    val1,
    val2,
}

void Main()
{
    En plop = 1;  //error: Cannot implicitly convert type 'int' to 'En'
    En woop = 0;  //no error
}
Run Code Online (Sandbox Code Playgroud)

当然它分配失败时1enum型变量.(打一个明确的演员,它会起作用.)

我的问题是:为什么分配0时不会失败?

Mat*_*son 9

就是这样,因为这就是规范所说的......

这是另一个原因,为什么给你的所有枚举一个值为0的项目总是一个好主意,因为你有时可能会得到它们的价值.


C#语言规范6.1.3中的相应部分:

6.1.3隐式枚举转换

隐式枚举转换允许将decimal-integer-literal 0转换为任何枚举类型和任何可以为其类型为枚举类型的可空类型.在后一种情况下,通过转换为基础枚举类型并包装结果来评估转换(第4.1.10节).

至于为什么会这样 - 嗯,我想只有语言委员会中有人会决定这些事情才会知道.

事实上,如果你看一下Rawling对原始问题的评论,我们确实有类似的东西.

  • 你能扩展一下吗? (2认同)