首页 > 解决方案 > 使用枚举和 | 作为字典键

问题描述

我正在尝试使用以枚举类型作为键、字符串作为值的字典。

这是我的枚举:

public enum MilitaryBranch{
    AirForce,
    Army,
    Navy,
    Marines,
    Coastguard
}

这是我的字典

Dictionary<MilitaryBranch, string> BranchToRankMapping = new Dictionary<MilitaryBranch, string>()
{
    {    MilitaryBranch.AirForce|MilitaryBranch.Army|MilitaryBranch.Marines, "General" },
    {    MilitaryBranch.Navy, "Admiral" },
    {    MilitaryBranch.Coastguard, "Commandant" },
}

在字典中,我试图使用 | 操作员将 OR AirForce、Army 和 Marines 放在一起,这样如果将这些枚举中的任何一个作为字典的 Key 提供,它将返回“General”。

这是我对字典和枚举的使用:

public void Test(){
    string af = BranchToRankMapping[MilitaryBranch.AirForce];
    string army = BranchToRankMapping[MilitaryBranch.Army];
    string marines = BranchToRankMapping[MilitaryBranch.Marines];
    string navy = BranchToRankMapping[MilitaryBranch.Navy];
    string cg= BranchToRankMapping[MilitaryBranch.Coastguard];
}

当尝试获取 MilitaryBranch.AirForce、.Army 和 .Marines 的字典值时,我得到一个 Key not found 异常。

我想做的事是不可能的吗?我是否必须为每个枚举值放入一个字典项?谢谢

标签: c#dictionaryenums

解决方案


除非另有说明,否则枚举映射到整数值。字典查找将基于枚举值的整数值。

由于您没有覆盖分配给枚举的值,因此它们从零开始编号。这意味着空军 == 0,陆军 == 1,依此类推。

当你结合时AirForce | Army | Marines,你真的在​​做0 | 1 | 3,也就是 3。

您设置字典的方式是为整数值 3(使用按位操作数)、2(用于海军)和 4(用于海军陆战队)添加条目。

恐怕您想要的最简单的方法是为军队的每个分支添加一个明确的条目。


推荐阅读