[英]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)
返回Type
的T
-和System.Type
未实现ImplementA
。 你想要的是:
if (typeof(ImplementA).IsAssignableFrom(typeof(T))
{
}
怎么样:
if(obj.GetType().Equals(typeof(ImplementA)))
{
// ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.