1

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

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

结果:

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

有人可以向我解释为什么这些值是它们编译后的值吗?

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

4

2 回答 2

4

根据文档

the value of each successive enumerator is increased by 1.

以这个为基础

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

还有另一个问题的答案

未定义多个枚举具有相同值时 ToString 将返回的内容

于 2013-04-15T15:56:29.007 回答
2

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

  • 或者这是一个导致混乱的错误(让不同的枚举成员具有相同的关联编号并没有多大意义)
  • 或者它是处理一些旧/遗留系统的代码,开发人员必须引入一些新值(出于开发商品或其他 1000 个原因),但仍与系统本身保持向后兼容。因此,这是一种扩展一些无法触及的非常旧代码的功能的解决方法。
于 2013-04-15T15:45:50.103 回答