c# - 使用 .net 反射查找共同的祖先类

标签 c# reflection

我有一个程序集,其中包含具有共同祖先类的类型(在程序集内定义。在大多数情况下,共同祖先不是该类的直接基类型。

我需要能够从这个程序集中的所有类型中过滤掉那些具有共同祖先的类型。由于各种原因,我无法实例化类型(它们通常不具有公共(public)构造函数签名)所以我必须从 myAssembly.GetTypes() 开始并检查类型本身的属性。换句话说,我必须使用类,而不是类的实例。

我如何检查此集合中的每个类型以确定它是否继承自所需的共同祖先?

后来:不用担心,我现在有了。诀窍是实例化一个类型对象,它是来自程序集的祖先类型,例如

Type ancestor = assy.getType("myAncestorClassName", true, true);
Type[] interestingClasses = assy.GetTYypes().Where(t => t.IsSubclassOf(ancestor));

但是这行不通:

Type[] interestingClasses = assy.GetTYypes().Where(t => t.IsSubclassOf(typeof(AncestorClass)));

因为我认为祖先类型是在另一个程序集中定义的,而不是在主程序集中定义的。

很久很久以后....感谢所有为此提供答案的人。一路上我被转移到其他事情上,但我现在有了一个巧妙的解决方案(并且学到了一些新东西)。

最佳答案

对于集合中的每种类型,您可以使用 Type.IsAssignableFrom 查看它们是否派生自该祖先.

例如:

var types = assembly.GetTypes().Exclude(t => typeof(CommonAncestor).IsAssignableFrom(t));

这应该获取程序集中不是从 CommonAncestor 派生的所有类型。

关于c# - 使用 .net 反射查找共同的祖先类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9210993/

相关文章:

C# Generics - 根据对象类型找到正确的具体类

c# - 使用NEST C#在Elastic搜索中删除嵌套文档

c# - 在 Wow6432Node 中写入注册表值而不重定向

java - 如何扫描在运行时作为字节码加载的 java 类的特定注释?

Java反射-从哪里继承的方法?

json - 从 JSON 数据生成 JSON 模式的工具

java - 初始化 java 类中所有对象的简单方法

c# - 使用 ConfigurationManager.RefreshSection 重新加载配置而不重新启动应用程序

c# - Linq where 子句 "if item is not null, evaluate, otherwise, get all data"

c# - 流利的断言 : Approximately compare the properties of objects stored in Lists