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

如何在 C# 中高效率地找出基底類型的所有衍生型別?

Linda Hamilton
發布: 2025-01-01 09:53:11
原創
559 人瀏覽過

How Can I Efficiently Find All Derived Types of a Base Type in C#?

找出某個類型的所有衍生型別

在程式設計中,通常需要辨識從特定基底型別繼承的所有型別。目前,常見的方法是迭代載入的程式集中的所有類型,並檢查它們是否可指派給基底類型。

但是,更有效率、更簡潔的方法是利用 LINQ 查詢來檢索所有派生類型types:

var listOfDerivedTypes = (
    from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
    from type in domainAssembly.GetTypes()
    where typeof(BaseType).IsAssignableFrom(type)
    select type).ToArray();
登入後複製

此查詢搜尋載入到目前 AppDomain的程序集中的所有類型,並篩選可分配給基本類型的類型,有效返回派生列表

流暢的版本和細節:

代碼可以更流暢的風格表達:

var listOfDerivedTypes = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(domainAssembly => domainAssembly.GetTypes())
    .Where(type => typeof(BaseType).IsAssignableFrom(type))
    .ToArray();
登入後複製

其他注意事項:

  • 這裡使用了反射過程,因此重複可能會影響表現。考慮使用延遲載入。
  • 使用domainAssembly.GetExportedTypes()將搜尋限制為公共類型可以提高效率。
  • 結果將包括基本類型本身,除非使用&& type != 明確排除typeof(BaseType).
  • 要排除抽象類,請使用&& !type.IsAbstract.
  • 處理泛型需要更複雜的邏輯。請參閱答案中提供的資源以獲取指導。

以上是如何在 C# 中高效率地找出基底類型的所有衍生型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板