优化查找实现IInterface <t>的所有类以及使用特定类型</t>显式实现它的那些类

时间:2009-08-11 18:11:43

标签: c# .net linq interface assemblies

我定义了一个接口ISerializeDeserialize,一些类继承了泛型接口。我还使用CodeDomProvider生成一些代码生成的程序集,它生成从同一个接口继承的类,但使用特定的Type实现它。

我想要实现的是获取通用实现的列表以及实现特定类型的实现。你可以在下面的代码中让T = int。

到目前为止,为了获得所有类型I的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();
}

我可以在一个功能中将它们组合在一起,但为了清晰起见我使用了两个。问题是,这可以优化还是以更好的方式完成?

1 个答案:

答案 0 :(得分:3)

不幸的是,我不知道任何其他方式(我也不得不多次编写这样的代码)。

你可以做的一件事是让第一种方法中的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();
}