首頁 > 後端開發 > C++ > LINQ 如何有效率地找出指定基本型別的所有衍生型別?

LINQ 如何有效率地找出指定基本型別的所有衍生型別?

Linda Hamilton
發布: 2025-01-03 19:04:41
原創
636 人瀏覽過

How Can LINQ Efficiently Find All Derived Types of a Specified Base Type?

尋找指定類型的衍生類型

在程式設計中,經常需要確定給定基底類型的所有衍生類型。傳統上,這是透過費力的技術來實現的,例如迭代加載的程式集中的所有類型並手動檢查目標類型的可分配性。

但是,有使用 LINQ(語言整合查詢)的更有效率、更優雅的解決方案。以下程式碼片段提供了一種簡單且高效的方法來完成此任務:

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

替代流利語法:

LINQ表達式也可以用更多語言寫出流暢的風格增強可讀性:

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

自訂:

  • 僅公開可見類型:若要只擷取公開可見的類型,請使用domainAssembly .GetExportedTypes()而不是domainAssembly.GetTypes().
  • 排除原始基底類別: 若要防止原始基底類型包含在結果中,請將&& type != typeof(BaseTypeName) 新增至where 子句。
  • 排除抽象類別:要排除抽象類,請新增 && ! type.IsAbstract 到 where 子句。
  • 泛型類型:處理泛型類型需要額外的考慮。如需指導,請參閱「詳細資訊」部分中的連結資源。

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

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