Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mendapatkan Semua Jenis Terbitan Jenis Asas dengan Cekap dalam C#?

Bagaimanakah Saya Boleh Mendapatkan Semua Jenis Terbitan Jenis Asas dengan Cekap dalam C#?

Linda Hamilton
Lepaskan: 2025-01-01 09:53:11
asal
558 orang telah melayarinya

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

Mencari Semua Jenis Terbitan Suatu Jenis

Dalam pengaturcaraan, selalunya perlu untuk mengenal pasti semua jenis yang diwarisi daripada jenis asas tertentu. Pada masa ini, pendekatan biasa adalah untuk melelar melalui semua jenis dalam perhimpunan yang dimuatkan dan menyemak sama ada ia boleh diserahkan kepada jenis asas.

Walau bagaimanapun, kaedah yang lebih cekap dan lebih bersih ialah menggunakan pertanyaan LINQ untuk mendapatkan semua terbitan jenis:

var listOfDerivedTypes = (
    from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
    from type in domainAssembly.GetTypes()
    where typeof(BaseType).IsAssignableFrom(type)
    select type).ToArray();
Salin selepas log masuk

Pertanyaan ini mencari semua jenis dalam himpunan yang dimuatkan ke dalam AppDomain semasa dan menapis untuk jenis yang boleh diberikan kepada jenis asas, dengan berkesan mengembalikan senarai jenis terbitan.

Versi dan Butiran Fasih:

Kod boleh dinyatakan dalam gaya yang lebih fasih :

var listOfDerivedTypes = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(domainAssembly => domainAssembly.GetTypes())
    .Where(type => typeof(BaseType).IsAssignableFrom(type))
    .ToArray();
Salin selepas log masuk

Tambahan Pertimbangan:

  • Refleksi digunakan dalam proses ini, jadi pengulangan mungkin menjejaskan prestasi. Pertimbangkan untuk menggunakan Lazy loading.
  • Menghadkan carian kepada jenis awam boleh meningkatkan kecekapan dengan menggunakan domainAssembly.GetExportedTypes().
  • Hasilnya akan termasuk jenis asas itu sendiri melainkan dikecualikan secara eksplisit menggunakan && type != typeof(BaseType).
  • Untuk mengecualikan kelas abstrak, gunakan && !type.IsAbstract.
  • Mengendalikan generik memerlukan logik yang lebih kompleks. Rujuk sumber yang disediakan dalam jawapan untuk panduan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Semua Jenis Terbitan Jenis Asas dengan Cekap dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan