gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:01:01 25 4
gpt4 key购买 nike

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

我需要能够从这个程序集中的所有类型中过滤掉那些具有共同祖先的类型。由于各种原因,我无法实例化类型(它们通常不具有公共(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com