确定myinstance是否为Generic <t> </t>

时间:2011-07-22 00:02:55

标签: c# generics

给定泛型类定义BaseClass<T>,是否可以测试这种情况?

if (myvar is BaseClass<>)

我想知道myvar是否来自泛型类,但我不知道(或关心)T可能是什么。

我认为答案是否定的......我的备份计划是通过myvar.GetType().ToString().Contains("BaseClass<")或其他东西来解决这个问题。

2 个答案:

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