C#枚举索引行为

时间:2018-07-15 14:08:26

标签: c# indexing enums

我偶然发现了以下示例代码,但我无法真正理解其背后的行为。我试图在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的索引,但是在索引中仅向上起作用而向下不起作用。那么为什么索引如此工作?

2 个答案:

答案 0 :(得分:1)

您的代码有效:

enum Color 
{ 
   Red = 0, Green = 3, Blue = 4 
}

只是编译器为您填充了一些值。如果不确定什么值会去哪里,只需每次手动将其全部初始化。有时,当枚举足够大时,您可能仍然应该这样做。

答案 1 :(得分:0)

我只能推测原因,但是索引无法双向工作都没有意义。

想象一下,如果您要覆盖最后一个索引为最大值,并且将第一个索引设置为0,那么两者之间的值将是模棱两可的,是递增还是递减?

如果您希望它向下工作,则只需从较早的索引开始。稍后指定索引并为您提供了使用显式索引的选项,而不必担心搞乱顺序