确定myinstance是否为Generic<;T>
本文关键字:lt gt Generic myinstance 是否 确定 | 更新日期: 2023-09-27 18:03:21
给定一个通用类定义BaseClass<T>
,是否可以测试此条件?
if (myvar is BaseClass<>)
我想知道myvar是否派生自泛型类,但我不知道(或不关心(T
可能是什么
我想答案是否定的……我的后备计划是通过myvar.GetType().ToString().Contains("BaseClass<")
或其他方式来解决这个问题。
像这样:
if (myVar.GetType().IsGenericType
&& myVar.GetType().GetGenericTypeDefinition() == typeof(BaseClass<>))
我认为SLaks示例解决了您的具体问题。
我只是想知道这对你有什么好处?在不了解T的情况下,您无法将其投射到任何对象或访问任何成员。
另一种解决方案是使用非通用接口,这样您就可以实际使用BaseClass做一些事情。例如:
class BaseClass<T> : IBaseClass {
}
interface IBaseClass {
public void SomethingUseful();
}
现在您只需要is
操作符:
if (myVar is IBaseClass)
((IBaseClass)myVar).SomethingUseful();