我有两个枚举和一个通用方法。泛型类型T可以是其中一个枚举。
public enum myEnumA
{
a,
b
}
public enum myEnumB
{
c,
d
}
public void myMethod<T>()
{
if (typeof(T) is myEnumA)
{
//do something
}
else if (typeof (T) is myEnumB)
{
//do something else
}
}
编译器告诉我&#34;给定的表达式永远不是提供的类型&#34;关于if检查。 有没有办法告诉它在运行时的确切枚举?
答案 0 :(得分:4)
你想:
if (typeof(T) == typeof(MyEnumA))
比较类型。 is
运算符用于测试值是否属于特定类型。
请注意,必须在泛型方法中测试特定类型表明它毕竟可能不是非常通用 - 考虑使用重载或仅使用完全独立的方法。
答案 1 :(得分:1)
因为typeof
会返回Type
个实例并且永远不会与您的枚举类型兼容。因此is
将始终返回false。相反,你需要
if (typeof(T) == typeof(myEnumA))
答案 2 :(得分:1)
你可以做到
if (typeof(T) == typeof(myEnumA))
您的类型是枚举,密封。如果你的类型没有被密封,你可能需要使用IsAssignableFrom
方法来检查子类,例如:
if (typeof(BaseTypeA).IsAssignableFrom(typeof(T))