C#枚举索引行为



我偶然发现了下面的示例代码,但我无法真正理解它背后的行为。我试图在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。介于两者之间的值是多少,是递增还是递减,这将是模糊的?

如果你想让它向下,你所要做的就是从早期的指数开始。稍后指定和索引为您提供了使用显式索引的选项,而不必担心扰乱的顺序

最新更新