2
我有一個定義的接口ISerializeDeserialize,以及一些類繼承了通用接口。我還有一些使用CodeDomProvider生成的程序集生成的程序集,它生成從相同接口繼承的類,但是使用特定的類型實現它。優化查找實現IInterface的所有類<T>以及那些使用特定類型明確實現的類
我想實現的是獲取泛型實現和實現特定類型的列表。您可以在下面的代碼中使用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();
}
我可以拉在一起的一個功能,但我用兩個用於清晰度。問題是,這可以優化還是以更好的方式完成?
它在第一循環這困擾我最檢查,請將.Name屬性,因爲它不是100 %。如果有人用相同的名稱創建了另一個接口,它可以匹配。猜猜我可以添加一些邏輯來檢查FullName。 –
爲我的回答添加了更好的版本。 –
謝謝..每天學點東西:) –