c# - 具有 T 类型如何在程序集中找到所有扩展 Base<T> 的类?

标签 c# .net .net-4.5 .net-assembly

假设我有:

public class Base<T> {}
public class MyBaseOne : Base<int> {}
public class MyBaseTwo : Base<int> {}

拥有 T 类型(例如 int)如何在程序集中找到所有扩展 Base 的类并能够构造它们的新对象?

最佳答案

您可以使用 Type.IsAssignableFrom :

var typeArgument = typeof(int);
var baseType = typeof(Base<>).MakeGenericType(typeArgument);
var matches = someAssembly.GetTypes()
                          .Where(t => typeof(baseType).IsAssignableFrom(t));

这将适用于您展示的示例,但不会找到(例如)Child<T>其中 Child被描述为:

public class Child<T> : Base<T>

我假设您确实想要找到可分配给 Base<T> 的类但没有Base<T>作为直接父类(super class)(即更长的类型层次结构)。如果你不这样做,那就更简单了:

var matches = someAssembly.GetTypes().Where(t => t.BaseType == baseType);

关于c# - 具有 T 类型如何在程序集中找到所有扩展 Base<T> 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29133752/

相关文章:

c# - 用 C# 中字典中的值替换字符串中的单词

c# - C#中判断文件或目录是否有删除权限

.net - 无法解决 .NET Core 和 .NET Framework 之间的项目依赖问题

.net - Microsoft.Bcl.Build NuGet 包有什么作用?

c# - 我如何找到字符串 c# 中的最后一个数字?

c# - 如何避免文件阻塞

asp.net-mvc -/obj/debug 中的临时生成文件_[guid] 破坏构建

c# - 如何在 C# 中将属性设置为默认值?

c# - 检测 WCF 双工契约(Contract)中的客户端死亡

c# - 结合多个 Linq OrderBy 实现 IComparer