gpt4 book ai didi

c# - 获取首先实现接口(interface)但没有派生类的所有 c# 类型

转载 作者:可可西里 更新时间:2023-11-01 08:22:29 25 4
gpt4 key购买 nike

Getting all types that implement an interface 有关我们可以轻松获取实现特定接口(interface)的 Assembly 中的所有 Type。

例子:

interface IFace
{
}

class Face : IFace
{
}

class TwoFace : Face
{
}

对于这个结构,我们将通过反射找到两个类,即所有从第一个实现派生的类,使用

GetTypes().Where(
type => type.GetInterfaces().Contains(typeof(IFace))
)

所以问题是:如何将结果限制为最初实现接口(interface)的基类?!在这个例子中:只有类类型 Face 是相关的。

最佳答案

首先,我会使用 Type.IsAssignableFrom 而不是 GetInterfaces,但是您需要做的就是排除父类型已经在集合中的类型:

var allClasses = types.Where(type => typeof(IFace).IsAssignableFrom(type))
.ToList(); // Or use a HashSet, for better Contains perf.
var firstImplementations = allClasses
.Except(allClasses.Where(t => allClasses.Contains(t.BaseType)));

或者如评论中所述,等效地:

var firstImplementations = allClasses.Where(t => !allClasses.Contains(t.BaseType));

请注意,这将不会返回一个派生自实现接口(interface)的类的类,但重新实现它。

关于c# - 获取首先实现接口(interface)但没有派生类的所有 c# 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735122/

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