评估枚举参数

时间:2012-11-27 23:33:25

标签: c# asp.net enums

我有两个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();产生错误:\

4 个答案:

答案 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);

我认为更好的选择是明确声明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;
为了安全起见,你必须检查所提供的枚举的类型,以便性能增益很小(如果有的话)(除非你能保证所有可以传入的枚举都基于整数类型,那么就不需要检查)