【问题标题】:C# Enum Index BehaviorC# 枚举索引行为
【发布时间】: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被自动赋值为零(因为它没有初始化器并且是第一个枚举成员);

标签: c# indexing enums


【解决方案1】:

你的代码是有效的:

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

只是编译器为您填写了一些值。如果您不确定哪些值在哪里,只需每次手动初始化它们。有时,当枚举足够大时,您可能还是应该这样做。

【讨论】:

    【解决方案2】:

    我只能推测为什么,但索引以两种方式工作是没有意义的。

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2016-06-26
      • 2022-08-15
      相关资源
      最近更新 更多