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

C#中enum新增枚举值后Enum.GetValues返回长度未更新问题

枚举GetValues返回长度固定为134问题排查

问题描述

最初定义的enum类型AdaptedType原有成员总数为134时单元测试执行失败,为该枚举新增更多成员条目后,枚举返回长度始终未发生变化。
尽管当前枚举实际成员数量远多于134,调用Enum.GetValues(typeof(AdaptedType)).Length;的返回结果仍然为134。

涉及的枚举定义代码如下:

public enum AdaptedType
   {
#pragma warning disable 1591
      Undefined = -2,
      Custom = -1,
      Length = 0,
      Area = 1,
      Volume = 2,
      Angle = 3,
      Number = 4,
      SheetLength = 5,
      SiteAngle = 6,
      Density = 7,
      Energy = 8,
      Friction = 9,
      Power = 10,
      Power_Density = 11,
      Pressure = 12,
      Temperature = 13,
      Velocity = 14,
      Airflow = 15,
      DuctSize = 16,
      CrossSection = 17,
      HeatGain = 18,
      Electrical_Current = 19,
      Electrical_Potential = 20,
      Electrical_Frequency = 21,
      Electrical_Illuminance = 22,
      Electrical_Luminous_Flux = 23,
      Electrical_Power = 24,
      Roughness = 25,
      Force = 26,
      LinearForce = 27,
      AreaForce = 28,
      Moment = 29,
      ForceScale = 30,
      LinearForceScale = 31,
      AreaForceScale = 32,
      MomentScale = 33,
      Electrical_Apparent_Power = 34,
      Electrical_Power_Density = 35,
      Piping_Density = 36,
      Piping_Flow = 37,
      Piping_Friction = 38,
      Piping_Pressure = 39,
      Piping_Temperature = 40,
      Piping_Velocity = 41,
      Piping_Viscosity = 42,
      PipeSize = 43,
      Piping_Roughness = 44,
      Stress = 45,
      UnitWeight = 46,
      ThermalExpansion = 47,
      LinearMoment = 48,
      LinearMomentScale = 49,
      ForcePerLength = 50,
      ForceLengthPerAngle = 51,
      LinearForcePerLength = 52,
      LinearForceLengthPerAngle = 53,
      AreaForcePerLength = 54,
      Piping_Volume = 55,
      Viscosity = 56,
      CoefficientOfHeatTransfer = 57,
      Airflow_Density = 58,
      Slope = 59,
      Cooling_Load = 60,
      Cooling_Load_Divided_By_Area = 61,
      Cooling_Load_Divided_By_Volume = 62,
      Heating_Load = 63,
      Heating_Load_Divided_By_Area = 64,
      Heating_Load_Divided_By_Volume = 65,
      Airflow_Divided_By_Volume = 66,
      Airflow_Divided_By_Cooling_Load = 67,
      Area_Divided_By_Cooling_Load = 68,
      WireSize = 69,
      Piping_Slope = 71,
      Currency = 72,
      Electrical_Efficacy = 73,
      Electrical_Wattage = 74,
      Color_Temperature = 75,
      DecSheetLength = 76,
      Electrical_Luminous_Intensity = 77,
      Electrical_Luminance = 78,
      Area_Divided_By_Heating_Load = 79,
      Factor = 80,
      Electrical_Temperature = 81,
      Electrical_CableTraySize = 82,
      Electrical_ConduitSize = 83,
      Reinforcement_Volume = 84,
      Reinforcement_Length = 85,
      Electrical_Demand_Factor = 86,
      DuctInsulationThickness = 87,
      DuctLiningThickness = 88,
      PipeInsulationThickness = 89,
      ThermalResistance = 90,
      ThermalMass = 91,
      Acceleration = 92,
      Bar_Diameter = 93,
      Crack_Width = 94,
      Displacement_Deflection = 95,
      Structural_Frequency = 97,
      Mass = 98,
      Mass_per_Unit_Length = 99,
      Moment_of_Inertia = 100,
      Surface_Area = 101,
      Period = 102,
      Pulsation = 103,
      Reinforcement_Area = 104,
      Reinforcement_Area_per_Unit_Length = 105,
      Reinforcement_Cover = 106,
      Reinforcement_Spacing = 107,
      Rotation = 108,
      Section_Area = 109,
      Section_Dimension = 110,
      Section_Modulus = 111,
      Section_Property = 112,
      Structural_Velocity = 113,
      Warping_Constant = 114,
      Weight = 115,
      Weight_per_Unit_Length = 116,
      ThermalConductivity = 117,
      SpecificHeat = 118,
      SpecificHeatOfVaporization = 119,
      Permeability = 120,
      Electrical_Resistivity = 121,
      MassDensity = 122,
      MassPerUnitArea = 123,
      Pipe_Dimension = 124,
      PipeMass = 125,
      PipeMassPerUnitLength = 126,
      TemperatureDifference = 127,
      Piping_TemperatureDifference = 128,
      Electrical_TemperatureDifference = 129,
      TimeInterval = 130,
      Speed = 131,
      [Obsolete("Use with care, not available in 2020")]
      Stationing = 132,
      [Obsolete("Use with care, not available in 2020, 2021")]
      AngularSpeed = 133,
      [Obsolete("Use with care, not available in 2020, 2021")]
      CostPerArea = 134,
      [Obsolete("Use with care, not available in 2020, 2021")]
      CostRateEnergy = 135,
      [Obsolete("Use with care, not available in 2020, 2021")]
      CostRatePower = 136,
      [Obsolete("Use with care, not available in 2020, 2021")]
      Diffusivity = 137,
      [Obsolete("Use with care, not available in 2020, 2021")]
      Distance = 138,
      [Obsolete("Use with care, not available in 2020, 2021")]
      FlowPerPower = 139,
      [Obsolete("Use with care, not available in 2020, 2021")]
      HeatCapacityPerArea = 140,
      [Obsolete("Use with care, not available in 2020, 2021")]
      HvacMassPerTime = 141,
      [Obsolete("Use with care, not available in 2020, 2021")]
      Image = 142,
      [Obsolete("Use with care, not available in 2020, 2021")]
      Integer = 143,
      [Obsolete("Use with care, not available in 2020, 2021")]
      IsothermalMoistureCapacity = 144,
      [Obsolete("Use with care, not available in 2020, 2021")]
      LoadClassification = 145,
      [Obsolete("Use with care, not available in 2020, 2021")]
      Material = 146,
      [Obsolete("Use with care, not available in 2020, 2021")]
      MultilineText = 147,
      [Obsolete("Use with care, not available in 2020, 2021")]
      NumberOfPoles = 148,
      [Obsolete("Use with care, not available in 2020, 2021")]
      PipingMassPerTime = 149,
      [Obsolete("Use with care, not available in 2020, 2021")]
      PowerPerFlow = 150,
      [Obsolete("Use with care, not available in 2020, 2021")]
      PowerPerLength = 151,
      [Obsolete("Use with care, not available in 2020, 2021")]
      RotationAngle = 152,
      [Obsolete("Use with care, not available in 2020, 2021")]
      StationingInterval = 153,
      [Obsolete("Use with care, not available in 2020, 2021")]
      Text = 154,
      [Obsolete("Use with care, not available in 2020, 2021")]
      ThermalGradientCoefficientForMoistureCapacity = 155,
      [Obsolete("Use with care, not available in 2020, 2021")]
      Url = 156,
      [Obsolete("Use with care, not available in 2020, 2021")]
      WireDiameter = 157,
      [Obsolete("Use with care, not available in 2020, 2021")]
      YesNo = 158,
      [Obsolete("Use with care, not available in 2020, 2021, 2022")]
      ApparentPowerDensity = 159,
      [Obsolete("Use with care, not available in 2020, 2021, 2022")]
      FillPattern = 160,
#pragma warning restore 1591
   }

根本原因

该问题和枚举定义本身无关,是运行时加载的AdaptedType是旧版本编译产物,没有包含后续新增的成员:

  • 标记[Obsolete]特性的成员不会被Enum.GetValues忽略,该特性仅在编译阶段产生警告提示,不影响运行时反射结果
  • 枚举默认底层类型为int,取值范围完全覆盖-2到160的区间,不存在数值溢出导致的成员丢失
  • 枚举成员的数值跳号(如跳过70、96两个值)也不会影响长度统计,只要成员在定义中存在就会被计入
  • 统计返回值恰好为134,刚好对应枚举中AngularSpeed = 133及之前的成员总数,说明运行时加载的是新增CostPerArea及后续成员之前的旧版本程序集。

常见触发场景

  • 多项目解决方案中,修改了枚举所在的公共项目后,单元测试项目没有触发重新编译,输出目录残留旧版本DLL
  • 单元测试项目引用的是枚举所在项目的本地DLL文件而非项目引用,修改枚举源码后没有替换引用的旧DLL
  • 测试运行器存在缓存,执行测试时没有加载最新的编译结果
  • 存在类型命名冲突:当前编辑的AdaptedType和运行时加载的AdaptedType属于不同命名空间,后者恰好只有134个成员
  • 枚举所在类库以NuGet包形式被引用,修改源码后没有重新打包、更新NuGet引用,程序加载的是NuGet缓存中的旧版本。

排查方案

  1. 在调用Enum.GetValues的代码前添加Console.WriteLine(typeof(AdaptedType).Assembly.Location);,查看运行时实际加载的程序集路径,确认该文件的修改时间为最新编译时间
  2. 执行「清理解决方案」操作,手动删除所有项目的bin、obj文件夹后重新生成整个解决方案,再运行测试
  3. 检查解决方案中是否存在其他同名的AdaptedType定义,确认调用代码引用的是当前修改的枚举所在的命名空间
  4. 如果是NuGet引用,清空本地NuGet缓存,重新打包引用最新版本的类库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:09:28