1

我有两个枚举和一个将枚举作为参数的方法。它们称为 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(); 产生错误:\

4

4 回答 4

4
public int TestEnum(Enum myEnum)
{
    return (int)(object)myEnum;
}
于 2012-11-27T23:37:09.490 回答
2

你只需写

int returnValue = (int)(object) myEnum;
于 2012-11-27T23:37:12.323 回答
1

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

int returnValue = myEnum.GetHashCode();

PS:使用 GetHashCode 获取 Enum int value,即不要这样做......

于 2012-11-27T23:49:58.313 回答
0

你可以试试:

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;.
为了安全起见,您必须检查所提供枚举的类型,因此如果有的话,性能提升会很小(除非您可以保证所有可以传入的枚举都基于整数类型,否则不需要检查) .

于 2012-11-28T02:02:51.037 回答