有没有办法知道我在运行时正在使用哪个确切的枚举
本文关键字:枚举 运行时 有没有 | 更新日期: 2023-09-27 18:30:51
我有两个枚举和一个泛型方法。泛型类型 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
}
}
编译器告诉我"给定的表达式永远不会是提供的类型"关于 if 检查。有没有办法在运行时判断它是哪个确切的枚举?
你需要:
if (typeof(T) == typeof(MyEnumA))
以比较类型。is
运算符用于测试值是否属于特定类型。
请注意,必须在泛型方法中测试特定类型表明它可能根本不是非常通用 - 请考虑使用重载或完全独立的方法。
因为typeof
返回一个Type
实例,并且永远不会与您的枚举类型兼容。所以is
总是返回假的。相反,您需要
if (typeof(T) == typeof(myEnumA))
你可以做
if (typeof(T) == typeof(myEnumA))
您的类型是密封的枚举。 如果您的类型未密封,您可能需要使用 IsAssignableFrom
方法来检查子类化,例如:
if (typeof(BaseTypeA).IsAssignableFrom(typeof(T))