c# - 获取泛型参数的类型

标签 c# generics

我有以下类(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/

相关文章:

java - 在Java中,为什么参数化类型的构造函数的无类型调用会引起编译器警告?

java - 避免使用多个 if-else 语句

c# - 在配置中更改 Entity Framework 提供程序

json - 使用Gson库动态解析未知数据

C#:没有从 Class<Child> 到 Class<Base> 的隐式转换

c# - 寻找 .NET 的自动日志记录工具/库

java - 如何使用泛型使这个 for 循环更通用?

c# - 事件目录的角色安全

c# - SignalR.Owin 与 SignalR.SelfHost

C# 事件在错误的线程上触发