9

拿这段代码:

enum En {
    val1,
    val2,
}

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

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

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

4

2 回答 2

9

之所以这样,是因为规范是这么说的……

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


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

6.1.3 隐式枚举转换

隐式枚举转换允许将十进制整数文字 0 转换为任何枚举类型和任何其基础类型为枚举类型的可空类型。在后一种情况下,通过转换为基础枚举类型并包装结果来评估转换(第 4.1.10 节)。

至于为什么会这样——好吧,我想只有语言委员会中决定这些事情的人会知道。

事实上,如果您查看 rawling 对原始问题的评论,我们确实有类似的情况。

于 2013-06-06T11:03:33.783 回答
1

您只能隐式使用 0 的原因是因为 0 始终是有效enum类型,而 1、2、3 或任何其他数字可能不一定是有效类型。例如试试这个

enum En {
val1=1,
val2=2,
}

0 仍然是有效enum类型,因为无论您做什么,0 都是默认值。这意味着如果您不让其中一个值等于 0,它将enum为您生成 0 类型。

于 2013-06-06T11:11:19.133 回答