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

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

Mary-Kate Olsen
Lepaskan: 2025-01-01 10:57:11
asal
735 orang telah melayarinya

How Can I Efficiently Find All Derived Types in C#?

Mencari Jenis Terbitan: Pendekatan Cekap dan Komprehensif

Dalam pembangunan perisian, adalah penting untuk mengenal pasti semua jenis yang diperoleh daripada jenis asas tertentu . Walaupun pendekatan biasa melibatkan penyemakan kebolehtugasan, ia mungkin tidak optimum dari segi prestasi atau keanggunan.

Penyelesaian Berasaskan Linq

Pendekatan yang lebih cekap dan ringkas dari segi sintaksis adalah untuk memanfaatkan Linq. Coretan kod berikut menunjukkan pertanyaan Linq yang mencari semua jenis yang diwarisi daripada jenis asas B:

    var listOfBs = (
                from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
                // alternative: from domainAssembly in domainAssembly.GetExportedTypes()
                from type in domainAssembly.GetTypes()
                where typeof(B).IsAssignableFrom(type)
                // alternative: && type != typeof(B)
                // alternative: && ! type.IsAbstract
                // alternative: where type.IsSubclassOf(typeof(B))
                select type).ToArray();
Salin selepas log masuk

API Fasih untuk Kebolehbacaan Dipertingkat

Untuk meningkatkan kebolehbacaan dan kebolehselenggaraan , pertanyaan di atas boleh difaktorkan semula menggunakan fasih API:

   var listOfBs = AppDomain.CurrentDomain.GetAssemblies()
                // alternative: .GetExportedTypes()
                .SelectMany(domainAssembly => domainAssembly.GetTypes())
                .Where(type => typeof(B).IsAssignableFrom(type)
                // alternative: => type.IsSubclassOf(typeof(B))
                // alternative: && type != typeof(B)
                // alternative: && ! type.IsAbstract
                ).ToArray();
Salin selepas log masuk

Pertimbangan dan Penambahbaikan

Pendekatan berasaskan Linq ini menawarkan beberapa kelebihan:

  • Pemuatan Jenis: Pertanyaan menggunakan pemuatan jenis peringkat pemasangan, yang lebih cekap daripada lelaran melalui semua jenis dalam aplikasi domain.
  • Pengendalian Generik: Pertanyaan boleh dilaraskan untuk mengendalikan jenis generik dengan menggunakan pantulan.
  • Penapisan Tambahan: Penapis lanjut boleh digunakan untuk mengecualikan kelas abstrak atau mengehadkan keputusan kepada umum jenis.

Kesimpulan

Penyelesaian berasaskan Linq ini menyediakan cara yang berprestasi dan boleh diperluaskan untuk mendapatkan semua jenis terbitan jenis asas tertentu. Fleksibiliti dan fleksibilitinya menjadikannya boleh disesuaikan dengan pelbagai kes penggunaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Semua Jenis Terbitan 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