【发布时间】:2013-06-02 08:43:11
【问题描述】:
获取这段代码:
enum En {
val1,
val2,
}
void Main()
{
En plop = 1; //error: Cannot implicitly convert type 'int' to 'En'
En woop = 0; //no error
}
当然,将1 分配给enum 类型的变量时会失败。 (打一个明确的演员表,它会起作用的。)
我的问题是:为什么分配 0 时不会失败?
【问题讨论】:
-
明确的欺骗,简短的回答,因为确实如此。
-
默认情况下,如果声明中未设置第一个枚举成员的值,则其值为0。 msdn.microsoft.com/en-us/library/ms182149(v=vs.100).aspx
-
这里有两个非常好的答案:stackoverflow.com/questions/14224465/…
-
我喜欢Eric's answer 中说“第二,允许零转换为任何枚举的原因是确保始终可以将“标志”枚举归零... C# 1.0 的设计者认为您可能不得不说
for (MyFlags f = (MyFlags)0; ..." 这看起来很奇怪,这是我见过的最接近“为什么 SPEC 是这样”的答案。
标签: c# enums compiler-errors