尋找派生類型:高效且全面的方法
在軟體開發中,識別從給定基本類型派生的所有類型至關重要。雖然常見的方法涉及檢查可分配性,但它們在性能或優雅方面可能不是最佳的。
基於 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中文網其他相關文章!