首頁 > 後端開發 > C++ > 如何有效率地找出 C# 中的所有衍生型別?

如何有效率地找出 C# 中的所有衍生型別?

Mary-Kate Olsen
發布: 2025-01-01 10:57:11
原創
735 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板