我试图从对象列表中找到一个特定的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,…)。这通常用于标志枚举,其中枚举值可以是多个已定义值的组合。例如,设备可以同时具有Jammer
和Radar
的能力。
好吧,现在Jammer + Radar
(或者,准确地说:Jammer | Radar
,使用按位或)不等于Jammer
,这就是你的比较失败的原因。您可以通过使用HasFlag
而不是Equals
来解决这个问题:
if (equipmentCapability.HasFlag(CapabilityEnum.Jammer)) { ... }
此外,您应该将Flags
属性添加到枚举中。这个
- 记录了这些枚举值可以组合的事实,而且
- 导致
equipmentCapability.ToString()
输出Jammer, Radar
而不是数值。