我有以下类(class)
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?
最佳答案
严格来说,您应该避免在泛型中进行过多的特化。将任何专门的逻辑放在接口(interface)的成员中会更清晰,这样任何实现都可以以不同的方式进行。但是,有多种方法:
你可以测试“obj”(假设它是非空的)
bool testObj = obj is ImplementA;
您可以测试 T 是否为 typeof(ImplementA):
bool testEq = typeof(T) == typeof(ImplementA);
同样,您可以测试它是 ImplementA 还是子类:
bool testAssign = typeof(ImplementA).IsAssignableFrom(typeof(T));
关于c# - 获取泛型参数的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/242393/