为什么枚举表现如此?

时间:2013-04-15 15:42:25

标签: c# .net enums

今天我在C#编译器中遇到了一些稍微奇怪的行为,当摆弄Enums时。

enum FunWithEnum
{
    One = 1,
    Two,
    Three,
    Four = 1,
    Five = 2,
    Six
}

结果:

  • FunWithEnum.One = One
  • FunWithEnum.Two = Two
  • FunWithEnum.Three = Three
  • FunWithEnum.Four = One
  • FunWithEnum.Five =两个
  • FunWithEnum.Six = Three

有人可以向我解释为什么这些值是他们曾经编译过的东西吗?

我最初的猜测与使用枚举时能够拥有别名有关。但我不知道这是否合理。

2 个答案:

答案 0 :(得分:4)

根据docs

the value of each successive enumerator is increased by 1.

在此基础上

One = 1,
Two,  // = 2
Three,  // = 3
Four = 1,
Five = 2,
Six //== 3

还来自the answer to the other question

当多个枚举具有相同的值

时,未定义ToString将返回的内容

答案 1 :(得分:2)

我在代码中看到的值是编译器从不分配的值,它是由编码器编写的。 所以

  • 或者是导致混乱的错误(使用相同相关数字的不同枚举成员没有多大意义)
  • 或者它是处理一些旧/遗留系统的代码,其中开发人员必须引入一些新值(用于开发商品或出于其他1000个原因)但仍与系统本身不兼容。因此,这是扩展一些无法触及的旧代码功能的工作方式。