我偶然发现了下面的示例代码,但我无法真正理解它背后的行为。我试图在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
蓝色的索引似乎是绿色+1,但在索引中只能向上工作,不能向下工作。那么,为什么索引是这样工作的呢?
您的代码是有效的:
enum Color
{
Red = 0, Green = 3, Blue = 4
}
只是编译器已经为您填充了一些值。如果你不确定什么值在哪里,每次只需手动初始化它们。有时,当枚举足够大时,您可能无论如何都应该这样做。
我只能推测原因,但索引双向工作是没有意义的。
想象一下,如果将最后一个索引覆盖为最大值,并且将第一个索引设置为0。介于两者之间的值是多少,是递增还是递减,这将是模糊的?
如果你想让它向下,你所要做的就是从早期的指数开始。稍后指定和索引为您提供了使用显式索引的选项,而不必担心扰乱的顺序