且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

.NET - 获取通用接口的所有实现?

更新时间:2022-12-04 12:56:53

你可以这样使用:

public static bool DoesTypeSupportInterface(Type type, Type inter)
{
    if(inter.IsAssignableFrom(type))
        return true;
    if(type.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == inter))
        return true;
    return false;
}

public static IEnumerable<Type> TypesImplementingInterface(Type desiredType)
{
    return AppDomain
        .CurrentDomain
        .GetAssemblies()
        .SelectMany(assembly => assembly.GetTypes())
        .Where(type => DoesTypeSupportInterface(type, desiredType));

}

虽然它可以抛出 TypeLoadException ,但这是原始代码中已经存在的问题.例如在 LINQPad 中它不起作用,因为某些库无法加载.

It can throw a TypeLoadException though but that's a problem already present in the original code. For example in LINQPad it doesn't work because some libraries can't be loaded.