You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#枚举复用成员作为底层值时输出结果差异的原因咨询

C#枚举相同值时ToString()输出不同的原因

先明确C#枚举的核心行为:

  • 多个枚举成员可以共用同一个底层数值,这是合法语法。
  • 如果你直接通过枚举成员名赋值(比如var myTest1 = test.east),ToString()默认返回该成员的名称,哪怕它和其他成员值完全一致。
  • 如果你通过数值转换得到枚举实例(比如var myTest1 = (test)0),ToString()会返回枚举定义中第一个出现的、值匹配的成员名称。

你碰到的输出差异,主要是以下两种情况之一:

1. 枚举实例的获取方式不一样

  • 第一个示例里,你可能不是直接赋值test.east,而是通过数值转换生成的实例(比如(test)0)。如果你的枚举定义是east=0, west=east,理论上第一个值为0的成员是east,应该返回east——但如果你的定义顺序写反了(比如west=0, east=west),第一个值为0的成员是west,此时数值转换得到的实例ToString()就会返回west,哪怕你以为自己赋值的是east。
  • 第二个示例里,你确实是直接用test.east赋值,所以ToString()返回east。

2. 运行时版本差异

在非常旧的.NET Framework版本(比如2.0)中,Enum.ToString()的行为和现代.NET(Core/.NET 5+)不同:当多个成员共用同一个值时,不管你怎么赋值,都会返回最后一个定义的成员名称。

  • 第一个示例中west定义在east之后,所以返回west;
  • 第二个示例中如果south定义在east之前,就会返回east。

另外也不排除代码笔误的可能:第一个示例里你不小心把myTest1赋值成了test.west,却误以为是test.east,导致输出结果和预期不符。

内容的提问来源于stack exchange,提问作者SnowZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:50:32