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
Mary-Kate Olsenasal
2025-01-01 10:57:11813semak imbas

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();

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();

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!

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