为什么我的枚举比较没有找到正确的值?

  • 本文关键字:枚举 比较 c# enums
  • 更新时间 :
  • 英文 :


我试图从对象列表中找到一个特定的Enum。下面是代码:

foreach (IEquipment eq in EntityEquipmentList)
{
if (eq.capability == capabilityEnum.Jam)
{
Console.WriteLine(eq.ToString())
}
}

只是为了清楚,EntityEquipmentList是设备对象的列表,我试图找到一个有"Jam"因为它的能力。正如你所看到的&;if&;语句,我想要"Jam"的能力。

所讨论的枚举:

Radar = 1
Jam = 2
Radio = 4
LowFreq = 8
HighFreq = 16

要明确的是,我100%确定列表中有一件装备具有Jam能力。

请注意,您的capabilities enum中的值是" 2的幂";(1、2、4、8、……)而不是1,2,3,4,…)。这通常用于标志枚举,其中枚举值可以是多个已定义值的组合。例如,设备可以同时具有JammerRadar的能力。

好吧,现在Jammer + Radar(或者,准确地说:Jammer | Radar,使用按位或)不等于Jammer,这就是你的比较失败的原因。您可以通过使用HasFlag而不是Equals来解决这个问题:

if (equipmentCapability.HasFlag(CapabilityEnum.Jammer)) { ... }

此外,您应该将Flags属性添加到枚举中。这个

  • 记录了这些枚举值可以组合的事实,而且
  • 导致equipmentCapability.ToString()输出Jammer, Radar而不是数值。

最新更新