查找派生类型:高效且全面的方法
在软件开发中,识别从给定基本类型派生的所有类型至关重要。虽然常见的方法涉及检查可分配性,但它们在性能或优雅方面可能不是最佳的。
基于 Linq 的解决方案
一种更高效且语法简洁的方法就是利用Linq。以下代码片段演示了一个 Linq 查询,该查询查找从基类型 B 继承的所有类型:
var listOfBs = ( from domainAssembly in AppDomain.CurrentDomain.GetAssemblies() // alternative: from domainAssembly in domainAssembly.GetExportedTypes() from type in domainAssembly.GetTypes() where typeof(B).IsAssignableFrom(type) // alternative: && type != typeof(B) // alternative: && ! type.IsAbstract // alternative: where type.IsSubclassOf(typeof(B)) select type).ToArray();
Fluent API for Enhanced Readability
提高可读性和可维护性,上面的查询可以使用 Fluent 进行重构API:
var listOfBs = AppDomain.CurrentDomain.GetAssemblies() // alternative: .GetExportedTypes() .SelectMany(domainAssembly => domainAssembly.GetTypes()) .Where(type => typeof(B).IsAssignableFrom(type) // alternative: => type.IsSubclassOf(typeof(B)) // alternative: && type != typeof(B) // alternative: && ! type.IsAbstract ).ToArray();
注意事项和增强功能
这种基于 Linq 的方法具有以下几个优点:
结论
这个基于 Linq 的解决方案提供了一种高性能且可扩展的方法来检索给定基类型的所有派生类型。其多功能性和灵活性使其能够适应不同的用例。
以上是如何高效查找 C# 中的所有派生类型?的详细内容。更多信息请关注PHP中文网其他相关文章!