使用枚举和|作为字典键

时间:2018-10-16 18:12:39

标签: c# dictionary enums

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

这是我的枚举:

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" },
}

在字典中,我试图使用|。或“空军队”,“陆军”和“海军陆战队”的运算符,以便如果将这些枚举中的任何一个作为字典的键提供,它将返回“常规”。

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

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异常。

我想做的是不可能的吗?是否需要为每个枚举值放入字典项?谢谢

3 个答案:

答案 0 :(得分:3)

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

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

结合使用AirForce | Army | Marines时,您实际上是在做0 | 1 | 3,即3。

设置字典的方式中,您添加了3(带按位操作数),2(针对海军)和4(针对海军陆战队)的整数值的条目。

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

答案 1 :(得分:3)

是的,每个都有一个条目。

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

答案 2 :(得分:2)

通过MilitaryBranch.AirForce|MilitaryBranch.Army|MilitaryBranch.Marines,您正在执行bitwise OR,结果为3,在您的情况下等于MilitaryBranch.Marines

因此,您将获得BranchToRankMapping[MilitaryBranch.Marines]的值,而不是BranchToRankMapping[MilitaryBranch.AirForce]BranchToRankMapping[MilitaryBranch.Army]的值。

是的,我们需要为您的枚举中的每个值输入一个条目。

相关问题