У меня есть общий класс со многими подтипами:Получение списка подтипов общего класса
public abstract class MyClass<T> : MyBaseClass where T : class
{...}
public class MySubClassA : MyClass<A>
{...}
public class MySubClassB : MyClass<B>
{...}
есть простой способ для поиска подклассы MyClass и получить IEnumerable<Type>
содержащий MySubClassA и MySubClassB?
Я использовал этот метод прежде, но я не уверен, как адаптировать его для использования с обобщениями:
public static IEnumerable<Type> GetSubTypesOf(Type t, bool baseAssemblyOnly = false)
{
List<Type> types = new List<Type>();
Assembly[] searchAssemblies = baseAssemblyOnly
? new[] { Assembly.GetAssembly(t) }
: AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly a in searchAssemblies)
{
types.AddRange(a.GetTypes()
.Where(myType => myType.IsClass
&& !myType.IsAbstract
&& myType.IsSubclassOf(t)));
}
return types;
}
Я не ясно, почему код, который вы размещены не на самом деле работает. Похоже, вы бы назвали GetSubTypesOf (typeof (MyClass)) правильно? –
Я могу вызвать GetSubTypesOf (typeof (MyClass )), чтобы получить MySubClassA, но я не хочу называть его в контексте конкретного T. Я бы назвал его «для всех Ts», например. GetSubTypesOf (typeof (MyClass <*>)) – Chris