ホームページ > バックエンド開発 > C++ > C# で基本型のすべての派生型を効率的に検索するにはどうすればよいですか?

C# で基本型のすべての派生型を効率的に検索するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-01 09:53:11
オリジナル
558 人が閲覧しました

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

型のすべての派生型の検索

プログラミングでは、多くの場合、特定の基本型から継承するすべての型を識別する必要があります。現在、一般的なアプローチは、読み込まれたアセンブリ内のすべての型を反復処理し、それらが基本型に割り当て可能かどうかを確認することです。

ただし、より効率的でクリーンな方法は、LINQ クエリを利用して派生したアセンブリをすべて取得することです。 type:

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート