【问题标题】:Evaluate enum parameter评估枚举参数
【发布时间】:2012-11-27 23:33:25
【问题描述】:

我有两个枚举和一个将枚举作为参数的方法。它们称为 ABC 和 DEF,方法称为 TestMethod(Enum myEnum)。代码如下:

public enum ABC
{
    Zero = 0,
    One = 1,
    Two = 2
};

public enum DEF
{
    Three = 3,
    Four = 4,
    Five = 5
};

public int TestEnum(Enum myEnum)
{
    int returnValue = ??? // How do I get the value out of this enum that can be either ABC or DEF?
    bool randomTestBool = returnValue > 3;
    return returnValue
}

public void CallerFunction()
{
    int whatsMyInt = TestEnum(DEF.Four);
}

从 CallerFunction() 我调用 TestEnum() 函数并传入两个(理想情况下更多)枚举之一。我需要了解如何获取整数格式的值,以便在函数中进行比较。现在,如果这是枚举的单一类型,即如果函数是 TestEnum(DEF myDefEnum) 那么这很容易,但是,该函数需要处理多个 Enum 类型。感谢之前的回复,我了解到要获得枚举类型,我可以做以下两件事之一:

1) bool isThisDef = myEnum 是 DEF;但我很好奇是否有比为每种 Enum 类型创建场景更通用的方法。也许是这样的

2) 键入 myEnumType = myEnum.GetType();但我现在不知道该怎么办。任何帮助是极大的赞赏。 =) 顺便说一句,字符串 testString = myEnum.toString();产生错误:\

【问题讨论】:

    标签: c# asp.net enums


    【解决方案1】:
    public int TestEnum(Enum myEnum)
    {
        return (int)(object)myEnum;
    }
    

    【讨论】:

    • 为什么中间转换为 object
    • @EricJ。避免Cannot convert type 'System.Enum' to 'int'
    • 虽然这些答案无疑会起作用,但我建议您问问自己,如果您将多个 enum 类型值转换为 int 值,您是否有正确的数据表示?
    • 我确实可以证明这一点。我正在查看两个答案,并且 LB 包含了使所有不同的(对象)。不过,谢谢你们,虽然我会在解除 15 分钟限制后立即检查这个答案是否正确,但我会给你们两个投票。感谢你们两位关于枚举数和值的快速速成课程:)
    • 此时你不妨使用Convert.ToInt32(myEnum)
    【解决方案2】:

    你只要写

    int returnValue = (int)(object) myEnum;
    

    【讨论】:

    • 现在你只重复我的回答。
    • 不,我们彼此在 3 秒内发布。我更正了我的答案。
    • 是的,您在从其他答案中学习正确答案后更正了答案。
    • 这并没有错。 SO 不是竞赛,它是一个学习和分享正确答案的地方。
    • 嗯,有两个选项,删除和编辑。两者都会导致 SO 拥有正确的信息,您做出了选择。
    【解决方案3】:

    我猜这种行为不太可靠,因为它可能会在 .Net 的进一步版本中被更改,但它也返回底层值:

    int returnValue = myEnum.GetHashCode();
    

    P.S.:Using GetHashCode for getting Enum int value,即不要这样做......

    【讨论】:

      【解决方案4】:

      你可以试试:

      int returnValue = Convert.ToInt32(myEnum);
      

      我认为更好的选择是将ABCDEF 明确声明为整数类型:

      public enum ABC : int
      {
          Zero = 0,
          One = 1,
          Two = 2
      };
      
      public enum DEF : int
      {
          Three = 3,
          Four = 4,
          Five = 5
      };
      

      那就用int returnValue = (int)myEnum;吧。
      为了安全起见,您必须检查所提供枚举的类型,因此如果有的话,性能提升会很小(除非您可以保证所有可以传入的枚举都基于整数类型,否则不需要检查) .

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多