确定枚举的类型

时间:2012-11-27 21:00:50

标签: c# asp.net enums

我有两个枚举器和一个带枚举器的方法。它们被称为ABC和DEF,该方法称为TestMethod(Enum myEnum)。代码如下:

public enum ABC
{
    Zero,
    One,
    Two
};

public enum DEF
{
    Zero,
    One,
    Two
};

public void TestEnum(Enum myEnum)
{
    ...
}

TestEnum函数接受任何枚举器。如何测试传入的参数属于哪两个?我可以盲目地开始用try / catch铸造测试它,但是这很难看。这样做更清洁的方法吗?提前感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

  

如何测试传入的参数属于哪一个?

您只需致电GetType

Type type = myEnum.GetType();

在此之后,不清楚你想要用它做什么,请注意。

可替换地:

if (myEnum is ABC)
{
}
else if (myEnum is DEF)
{
}

编辑:如果您能够更改方法签名,如果您的呼叫者知道该类型,那么根据Jeppe的评论,您可以使用:

public void TestEnum<T>(T value) where T : struct
{
    // Use typeof(T) here
}

您不能将T限制为具有正常C#的枚举类型...尽管编写代码的hacky ways通过后处理应用了此类约束。

答案 1 :(得分:1)

先生。 Skeet已经钉了这个但是!

两种方法怎么样。

public void TestEnum(ABC abcEnum) {
    //do ABC stuff
}

public void TestEnum(DEF defEnum) {
    //do DEF stuff
}

您可以获得所需的分支,但无需担心if语句是否正确。是的,它只是一个if语句,但如果你添加枚举GHI会怎样。现在有一些未解释的输入供TestEnum处理。使用重载方法,你会在编译时发现(甚至更好,智能感知会抓住你)。