【发布时间】:2009-08-11 18:11:42
【问题描述】:
我定义了一个接口 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();
}
我可以将它们放在一个函数中,但为了清楚起见,我使用了两个。问题是,这可以优化还是以更好的方式完成?
【问题讨论】:
标签: c# .net linq interface assemblies