获取Generic参数的类型

时间:2008-10-28 06:26:50

标签: c# generics

我有以下课程

public interface InterfaceBase
{
}

public class ImplementA:InterfaceBase
{
}

public class ImplementB:InterfaceBase
{
}

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

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

typeof(T) is ImplementA

但此表达式始终评估为false。

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

4 个答案:

答案 0 :(得分:9)

严格来说,你应该避免在泛型中过多的专业化。将任何专用逻辑放在接口上的成员中会更加清晰,因此任何实现都可以采用不同的方式。但是,有很多方法:

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

    bool testObj = obj is ImplementA;

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

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

同样,您可以将其作为ImplementA或子类进行测试:

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

答案 1 :(得分:4)

obj is ImplementA

答案 2 :(得分:4)

typeof(T)返回Type的{​​{1}} - 而T未实现System.Type。你想要的是:

ImplementA

答案 3 :(得分:0)

怎么样:

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