【发布时间】:2018-07-15 14:08:26
【问题描述】:
我偶然发现了以下示例代码,但我无法真正理解其背后的行为。我试图在 C# 文档中找到解释,但没有成功。
enum Color { Red, Green = 3, Blue }
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine((Color) 1);
Console.WriteLine((Color) 2);
Console.WriteLine((Color) 3);
Console.WriteLine((Color) 4);
Console.WriteLine((Color) 5);
}
}}
代码的输出是:
1
2
Green
Blue
5
Blue 似乎获得了 Green+1 的索引,但在索引中只能向上而不是向下。那么为什么索引会这样工作呢?
【问题讨论】:
-
因为这就是语言的设计者决定它工作的方式。你如何让它双向工作?如果你有
{ red=1,green,blue=4 }怎么办?用当前的规则很容易找出绿色是 2。在你的世界里,它会得到什么价值?你不能轻易分辨,因为有冲突。 -
在语言规范enum members中有描述:枚举成员
Red被自动赋值为零(因为它没有初始化器并且是第一个枚举成员);