Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menukar senarai kelas yang diperolehi ke senarai kelas asas di C#?

Bagaimanakah saya boleh menukar senarai kelas yang diperolehi ke senarai kelas asas di C#?

DDD
DDDasal
2025-02-01 18:01:08650semak imbas

How Can I Convert a List of Derived Classes to a List of Base Classes in C#?

Menukar senarai kelas yang diperolehi ke senarai kelas asas dalam C#

warisan dalam C# membolehkan membuat kelas yang diperoleh dari kelas asas atau antara muka. Walau bagaimanapun, secara langsung menyerahkan kelas yang diperolehi kepada kelas asasnya tidak dibenarkan. Batasan ini timbul dari ketat sistem jenis mengenai parameter jenis generik.

List Pertimbangkan contoh ini: List

untuk mengatasinya, kita boleh menggunakan dua kaedah utama:

<code class="language-csharp">interface IA {}

class B : IA {}

class C : B {}

class Test
{
    static void Main(string[] args)
    {
        IA a = new C(); // This is valid
        List<IA> listOfIA = new List<C>(); // Compiler error
    }
}</code>

Kaedah 1: Menggunakan

ConvertAll Pendekatan ini melangkah melalui senarai kelas yang diperolehi dan secara eksplisit membuang setiap elemen ke jenis kelas asas.

Kaedah 2: Menggunakan Linq's
<code class="language-csharp">List<C> listOfC = new List<C>(); // Your list of derived classes
List<IA> listOfIA = listOfC.ConvertAll(x => (IA)x);</code>

Cast Linq menyediakan penyelesaian yang lebih ringkas menggunakan kaedah . Kaedah ini melakukan penukaran jenis yang sama seperti

tetapi dengan sintaks yang lebih diperkemas.

Cast<T> ConvertAll Kedua -dua kaedah mencapai hasil yang sama: senarai baru yang mengandungi objek dari senarai asal, tetapi dengan jenis kelas asas. Pendekatan Linq () umumnya lebih disukai untuk kebolehbacaan dan kesimpulannya. Ingatlah untuk mengendalikan pengecualian yang berpotensi jika pelakon mungkin gagal (mis., Jika senarai itu mengandungi unsur -unsur yang sebenarnya tidak berasal dari kelas asas).

Atas ialah kandungan terperinci Bagaimanakah saya boleh menukar senarai kelas yang diperolehi ke senarai kelas asas di 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