You can use something like this:
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)); }
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.