确定枚举的类型

Luk*_*kas 1 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)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 6

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

你可以打电话GetType:

Type type = myEnum.GetType();
Run Code Online (Sandbox Code Playgroud)

请注意,目前还不清楚你想用它什么.

或者:

if (myEnum is ABC)
{
}
else if (myEnum is DEF)
{
}
Run Code Online (Sandbox Code Playgroud)

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

public void TestEnum<T>(T value) where T : struct
{
    // Use typeof(T) here
}
Run Code Online (Sandbox Code Playgroud)

你不能限制T为具有普通C#的枚举类型...尽管有一些hacky方法可以通过后处理应用这些约束来编写代码.