我有两个Enumerations和一个将枚举作为参数的方法。它们被称为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),那么这将很容易,但是,该函数需要处理多个枚举类型。感谢先前的回复,我了解到要获得一种枚举,我可以做两件事之一:
1)bool isThisDef = myEnum是DEF;但我很好奇是否有一种更普遍的方式,而不是为每个Enum类型创建一个场景。也许是这样的事情
2)输入myEnumType = myEnum.GetType();但我现在不知道该怎么做。任何帮助是极大的赞赏。 =)顺便说一句,字符串testString = myEnum.toString();产生错误:\
答案 0 :(得分:4)
public int TestEnum(Enum myEnum)
{
return (int)(object)myEnum;
}
答案 1 :(得分:2)
你只需写
int returnValue = (int)(object) myEnum;
答案 2 :(得分:1)
我猜这种行为不太可靠,因为它可能会在.Net的更多版本中被更改,但它也会返回基础值:
int returnValue = myEnum.GetHashCode();
P.S。:Using GetHashCode for getting Enum int value,即不要这样做......
答案 3 :(得分:0)
你可以尝试:
int returnValue = Convert.ToInt32(myEnum);
我认为更好的选择是明确声明ABC
和DEF
为整数类型:
public enum ABC : int
{
Zero = 0,
One = 1,
Two = 2
};
public enum DEF : int
{
Three = 3,
Four = 4,
Five = 5
};
然后使用int returnValue = (int)myEnum;
。
为了安全起见,你必须检查所提供的枚举的类型,以便性能增益很小(如果有的话)(除非你能保证所有可以传入的枚举都基于整数类型,那么就不需要检查)