我偶然发现了以下示例代码,但我无法真正理解其背后的行为。我试图在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的索引,但是在索引中仅向上起作用而向下不起作用。那么为什么索引如此工作?
答案 0 :(得分:1)
您的代码有效:
enum Color
{
Red = 0, Green = 3, Blue = 4
}
只是编译器为您填充了一些值。如果不确定什么值会去哪里,只需每次手动将其全部初始化。有时,当枚举足够大时,您可能仍然应该这样做。
答案 1 :(得分:0)
我只能推测原因,但是索引无法双向工作都没有意义。
想象一下,如果您要覆盖最后一个索引为最大值,并且将第一个索引设置为0,那么两者之间的值将是模棱两可的,是递增还是递减?>
如果您希望它向下工作,则只需从较早的索引开始。稍后指定索引并为您提供了使用显式索引的选项,而不必担心搞乱顺序