public static List <T> GetObjectsFromBaseInterface <T>(Type TypeOfT, Type[] ArrayTypes, params object[] Args) { List <T> ListObject = new List <T>(); foreach (Type ActiveType in ArrayTypes) { if (ActiveType.IsAbstract) { continue; } foreach (Type ActiveInterface in ActiveType.GetInterfaces()) { Type ObjectType = ActiveInterface; bool InstanceIsBaseObject = false; while (ObjectType != null && !InstanceIsBaseObject) { if (ObjectType == TypeOfT) { InstanceIsBaseObject = true; } ObjectType = ObjectType.BaseType; } if (InstanceIsBaseObject) { T NewObject = (T)Activator.CreateInstance(ActiveType, Args); ListObject.Add(NewObject); } } } return(ListObject); }