Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah LINQ Boleh Mencari Semua Jenis Terbitan bagi Jenis Asas Tertentu dengan Cekap?

Bagaimanakah LINQ Boleh Mencari Semua Jenis Terbitan bagi Jenis Asas Tertentu dengan Cekap?

Linda Hamilton
Linda Hamiltonasal
2025-01-03 19:04:41670semak imbas

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

Mencari Jenis Terbitan Jenis Tertentu

Dalam pengaturcaraan, selalunya perlu untuk menentukan semua jenis terbitan jenis asas tertentu. Secara tradisinya, ini telah dicapai melalui teknik yang susah payah seperti mengulangi semua jenis dalam perhimpunan yang dimuatkan dan menyemak secara manual untuk menentukan kebolehtugasan kepada jenis sasaran.

Walau bagaimanapun, penyelesaian yang lebih cekap dan elegan wujud menggunakan LINQ (Pertanyaan Bersepadu Bahasa) . Coretan kod berikut menyediakan cara yang mudah dan berprestasi untuk menyelesaikan tugas ini:

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

Sintaks Fasih Alternatif:

Ekspresi LINQ juga boleh ditulis dalam bentuk yang lebih gaya fasih untuk dipertingkatkan kebolehbacaan:

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

Penyesuaian:

  • Jenis Kelihatan Umum Sahaja: Untuk mendapatkan semula jenis yang boleh dilihat secara umum, gunakan domainAssembly .GetExportedTypes() bukannya domainAssembly.GetTypes().
  • Kecualikan Kelas Asas Asal: Untuk mengelakkan jenis asas asal daripada dimasukkan dalam keputusan, tambah && taip != typeof(BaseTypeName) pada klausa where.
  • Kecualikan Kelas Abstrak: Untuk mengecualikan kelas abstrak, tambah && ! type.IsAbstract to the where.
  • Jenis Generik: Pengendalian jenis generik memerlukan pertimbangan tambahan. Untuk panduan, rujuk sumber yang dipautkan dalam bahagian "Butiran".

Atas ialah kandungan terperinci Bagaimanakah LINQ Boleh Mencari Semua Jenis Terbitan bagi Jenis Asas Tertentu dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn