我有两个枚举器和一个带枚举器的方法。它们被称为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铸造测试它,但是这很难看。这样做更清洁的方法吗?提前感谢您的帮助。
答案 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处理。使用重载方法,你会在编译时发现(甚至更好,智能感知会抓住你)。