public static IEnumerable <Type> GetTypes(this IEnumerable <Assembly> assemblies, Type t) => from assembly in assemblies.Distinct() from type in assembly.GetTypes() where SystemExtensions.IsAssignableFrom(t, type) where !type.IsAbstract where !type.IsGenericTypeDefinition where !type.IsInterface select type;
static bool Predicate(Type x, Type ifaceType) => (x != ifaceType) && !reserved.Contains(x) && !reservedRoot.Any(t => SystemExtensions.IsAssignableFrom(t, x));