1

我有两个枚举器和一个采用枚举器的方法。它们称为 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 强制转换来测试它,但这太丑了。有什么更清洁的方法吗?预先感谢您的任何帮助。

4

2 回答 2

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# 将其限制为 enum 类型......尽管有一些通过后处理应用此类约束的hacky 方法来编写代码。

于 2012-11-27T21:02:05.293 回答
1

斯基特先生已经搞定了,但是!

两种方法怎么样。

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

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

您可以获得所需的分支,但不必担心 if 语句是否正确。没错,这只是一个 if 语句,但如果添加枚举 GHI 会怎样。现在有一些未说明的输入供 TestEnum 处理。使用重载方法你会在编译时捕捉到它(或者更好的是,智能感知会捕捉到你)。

于 2012-11-27T21:37:51.323 回答