给定泛型类定义BaseClass<T>
,是否可以测试这种情况?
if (myvar is BaseClass<>)
我想知道myvar是否来自泛型类,但我不知道(或关心)T
可能是什么。
我认为答案是否定的......我的备份计划是通过myvar.GetType().ToString().Contains("BaseClass<")
或其他东西来解决这个问题。
答案 0 :(得分:9)
像这样:
if (myVar.GetType().IsGenericType
&& myVar.GetType().GetGenericTypeDefinition() == typeof(BaseClass<>))
答案 1 :(得分:0)
我认为SLaks的例子可以解决您的具体问题。
我只是想知道你有什么用处?在不知道T的情况下,您无法将其转换为任何内容或访问任何成员。
另一种解决方案是使用非通用接口,以便您可以使用BaseClass实际执行某些操作。例如:
class BaseClass<T> : IBaseClass {
}
interface IBaseClass {
public void SomethingUseful();
}
现在您只需要is
运算符:
if (myVar is IBaseClass)
((IBaseClass)myVar).SomethingUseful();