【问题标题】:Why is my enum comparison not finding the proper value?为什么我的枚举比较没有找到合适的值?
【发布时间】:2022-06-10 22:06:00
【问题描述】:

我正在尝试从对象列表中查找特定的枚举。代码如下:

foreach (IEquipment equipment in EntityEquipmentList)
{
     CapabilityEnum equipmentCapability = equipment.Capability;
     this.JammerLabel.Text += "\nEquipment Found " + equipment.Name + equipmentCapability;
                           
     if (equipmentCapability.Equals(CapabilityEnum.Jammer))
     {
          this.JammerLabel.Text += "\nJAMMER FOUND " + equipment.Capability;
          Form1 SUCCESSFORJAMMER = new Form1();
          SUCCESSFORJAMMER.Show();                     
     }
}

为了清楚起见,EntityEquipmentList 是 IEquipment 对象的列表,我正在尝试找到具有“干扰器”功能的对象。正如您在“if”语句中看到的那样,我将我的设备的能力(属于“CapabilityEnum”类型)与 Jammer 的 Enum 的能力进行比较。

我将附上下面的枚举只是为了方便参考,以防它很重要。

    public enum CapabilityEnum : long
    {
        CustomBits = -281474976710656,
        Flare = -2147483648,
        All = -1,
        None = 0,
        TDL_JREAP_A = 1,
        SubSurface = 2,
        Surface = 4,
        Air = 8,
        Space = 16,
        Sensor = 32,
        Weapon = 64,
        Active = 128,
        Detection = 256,
        Tracking = 512,
        Guidance = 1024,
        Command = 2048,
        Illuminator = 4096,
        EarlyWarningRadar = 32768,
        HeightFindingRadar = 65536,
        AcquisitionRadar = 131072,
        Optical = 262144,
        Radio = 524288,
        Jammer = 1048576,
        Radar = 2097152,
        Sonar = 4194304,
        TDL_Link16 = 8388608,
        TDL_EPLRS_SADL = 16777216,
        IFF = 33554432,
        TDL_C2_IADS = 67108864,
        TDL_GATEWAY = 134217728,
        TDL_IDM = 268435456,
        TDL_C2_SAM = 536870912,
        Chaff = 1073741824
    }
}

如您所见,Jammer 位于中间,值为“1048576”。老实说,这是我第一次与 Enum 合作,因此非常感谢您的帮助。

需要明确的是,我 100% 确定列表中有一件具有干扰能力的设备。

【问题讨论】:

    标签: c# enums


    【解决方案1】:

    请注意,您的功能枚举中的值是“2 的幂”。这通常用于flags enums,其中枚举值可以是不同定义值的组合。例如,设备可以具有JammerRadar 的能力。

    好吧,现在Jammer + Radar 不等于Jammer,这就是您的比较失败的原因。你真正想要的是:

    if (equipmentCapability.HasFlag(CapabilityEnum.Jammer))
    

    【讨论】:

      猜你喜欢
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2018-01-14
      • 1970-01-01
      • 2019-04-06
      相关资源
      最近更新 更多