繁体   English   中英

获取泛型参数的类型

[英]Get the type of the generic parameter

我有以下课程

public interface InterfaceBase
{
}

public class ImplementA:InterfaceBase
{
}

public class ImplementB:InterfaceBase
{
}

public void TestImplementType<T>(T obj) where T: InterfaceBase
{
}

如何推断T是ImplementA还是ImplementB? 我试着用

typeof(T) is ImplementA

但是这个表达式总是被评估为假。

编辑:我将如何将 obj 转换为ImplementA 或ImplementB?

严格来说,您应该避免在泛型中进行过多的专业化。 将任何专门的逻辑放在接口上的成员中会更清晰,这样任何实现都可以以不同的方式执行。 但是,有多种方法:

您可以测试“obj”(假设它是非空的)

    bool testObj = obj is ImplementA;

您可以测试 T 是否为 typeof(ImplementA):

    bool testEq = typeof(T) == typeof(ImplementA);

同样,您可以测试它是否为ImplementA 或子类:

    bool testAssign = typeof(ImplementA).IsAssignableFrom(typeof(T));

obj is ImplementA

typeof(T)返回TypeT -和System.Type未实现ImplementA 你想要的是:

if (typeof(ImplementA).IsAssignableFrom(typeof(T))
{
}

怎么样:

 if(obj.GetType().Equals(typeof(ImplementA)))
 {
   // ...
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM