为什么枚举会有这样的行为?

本文关键字:枚举 为什么 | 更新日期: 2023-09-27 18:09:22

今天在处理枚举时,我在c#编译器中遇到了一些稍微奇怪的行为。

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

  • FunWithEnum。一=一
  • FunWithEnum。二=二
  • FunWithEnum。三=三
  • FunWithEnum。四=一
  • FunWithEnum。五=二
  • FunWithEnum。六=三

谁能给我解释一下为什么这些值是它们编译后的值?

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

为什么枚举会有这样的行为?

根据文档

the value of each successive enumerator is increased by 1.

基于此

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

还有另一个问题的答案

当多个枚举具有相同的值

时ToString将返回什么是未定义的

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

  • 或者它是一个导致混乱的错误(具有相同关联数字的不同枚举成员没有多大意义)
  • 或者它是处理一些旧/遗留系统的代码,其中开发人员必须引入一些新值(用于开发商品或其他1000个原因),但与系统本身保持向后兼容。所以这是一种变通方法,可以扩展一些非常旧的代码的功能,这些代码不能被触摸。