我定义了一个接口(interface) ISerializeDeserialize 和一些继承通用接口(interface)的类。我还有一些使用 CodeDomProvider 生成代码的程序集,这些程序集生成从同一接口(interface)继承的类,但使用特定类型实现它。
我想要实现的是获取通用实现和实现特定类型的列表。您可以在下面的代码中让 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();
}
我可以将它们放在一个函数中,但为了清楚起见,我使用了两个函数。问题是,这是否可以优化或以更好的方式完成?
最佳答案
不幸的是,我不知道有任何其他方法(我也不得不多次编写这样的代码)。
您可以做的一件事就是使第一个方法中的 Where
变得更好一点:
private List<Type> GetListOfGenericSerializers()
{
Type interfaceGenricType = typeof(ISerializeDeserialize<>);
var serializers =
from assembly in AppDomain.CurrentDomain.GetAssemblies()
from genericType in assembly.GetTypes()
from interfaceType in genericType.GetInterfaces()
where genericType.IsGenericTypeDefinition &&
interfaceType.IsGeneric &&
interfaceType.GetGenericTypeDefinition() == interfaceGenericType
select genericType;
return serializers.ToList();
}
关于c# - 优化查找所有实现 IInterface<T> 的类以及使用特定类型显式实现它的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1262057/