public static Type[] GetSubTypes <T>(string assemblyName = "") { IEnumerable <Assembly> assemblies = AllLoadedAssemblies; if (AllLoadedAssemblies.Count(a => assemblyName.IsNotEmpty() && a.GetName().Name == assemblyName) > 0) { assemblies = AllLoadedAssemblies.Where(a => a.FullName.StartsWith(assemblyName)); } else if (assemblyName.IsNotEmpty()) { return(null); } return(assemblies .Select(a => a.GetTypes()) .SelectMany(t => t) .Where(t => t.IsSubclassOf(typeof(T)) && !t.IsAbstract)? .ToArray()); }