首页 > 后端开发 > C++ > 如何高效查找 C# 中的所有派生类型?

如何高效查找 C# 中的所有派生类型?

Mary-Kate Olsen
发布: 2025-01-01 10:57:11
原创
727 人浏览过

How Can I Efficiently Find All Derived Types in C#?

查找派生类型:高效且全面的方法

在软件开发中,识别从给定基本类型派生的所有类型至关重要。虽然常见的方法涉及检查可分配性,但它们在性能或优雅方面可能不是最佳的。

基于 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板