确定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<")或其他方式来解决这个问题。

确定myinstance是否为Generic<;T>

像这样:

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();