gpt4 book ai didi

c# - 优化查找所有实现 IInterface 的类以及使用特定类型显式实现它的类

转载 作者:行者123 更新时间:2023-11-30 22:49:16 24 4
gpt4 key购买 nike

我定义了一个 ISerializeDeserialize 接口(interface),一些类继承了通用接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com