У меня определен интерфейс ISerializeDeserialize и некоторые классы наследуют общий интерфейс. У меня также есть некоторые сгенерированные кодом сборки, использующие CodeDomProvider, который генерирует классы, унаследованные от того же интерфейса, но реализующие его с определенным типом.
Чего я хочу добиться, так это получить список универсальных реализаций и реализаций определенного типа. Вы можете указать T = int в приведенном ниже коде.
Чтобы получить все классы, реализующие ISerializeDeserialize некоторого типа, у меня пока есть следующий код:
private List<Type> GetListOfGenericSerializers()
{
Type interfaceGenricType = typeof(ISerializeDeserialize<T>);
var serializers = from assembly in AppDomain.CurrentDomain.GetAssemblies()
from genericType in assembly.GetTypes()
from interfaceType in genericType.GetInterfaces()
.Where(iType => (iType.Name == interfaceGenricType.Name && genericType.IsGenericTypeDefinition))
select genericType;
return serializers.ToList();
}
private List<Type> GetListOfTypeImplementedSerializers()
{
Type interfaceGenricType = typeof(ISerializeDeserialize<T>);
var serializers = from assembly in AppDomain.CurrentDomain.GetAssemblies()
from implementedType in assembly.GetTypes()
from interfaceType in implementedType.GetInterfaces()
.Where(iType => iType == interfaceGenricType)
select implementedType;
return serializers.ToList();
}
Я мог бы собрать их в одну функцию, но для ясности я использую две. Вопрос в том, можно ли это оптимизировать или это сделать лучше?