Rumah >pembangunan bahagian belakang >C++ >Bagaimana cara menukar senarai kelas yang diperolehi ke senarai kelas asas di C#?

Bagaimana cara menukar senarai kelas yang diperolehi ke senarai kelas asas di C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-02-01 17:41:101071semak imbas

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

c#lirik diubah menjadi senarai kelas asas

Mekanisme warisan membolehkan kita membuat kelas baru berdasarkan kelas yang sedia ada, tetapi konsep yang sama tidak digunakan secara langsung untuk senarai generik. Khususnya, kami tidak dapat mengisytiharkan

dan memberikan senarai jenis yang diperoleh, walaupun kelas yang diperolehi mewarisi kelas berasaskan diri. Sila pertimbangkan contoh berikut:

List<基类>

Kod ini gagal semasa penyusunan, kerana pengkompil mengharapkan senarai objek A, bukan senarai objek C. Untuk menyelesaikan masalah ini, kita perlu menukar senarai objek yang diperoleh ke dalam senarai objek asas.
<code class="language-csharp">interface A { }

class B : A { }

class C : B { }

class Test
{
    static void Main(string[] args)
    {
        A a = new C(); // 正确
        List<A> listOfA = new List<C>(); // 编译错误
    }
}</code>

Kaedah penukaran

Kaedah menukar ke adalah untuk melancarkan unsur -unsur senarai dan secara manual menukarnya secara manual. Ini boleh dilaksanakan dengan menggunakan

kaedah:

List<派生类> List<基类> di sini, setiap elemen dalam senarai Ateratory C menukarnya untuk menaip A dan tambahkannya ke senarai ListOfa baru. ConvertAll

Kaedah alternatif menggunakan linq
<code class="language-csharp">List<A> listOfA = new List<C>().ConvertAll(x => (A)x);</code>

atau, kita boleh menggunakan LINQ untuk melaksanakan penukaran:

di sini, Tukar setiap elemen dalam senarai untuk menaip A, dan

mencipta senarai baru yang mengandungi elemen penukaran.

Atas ialah kandungan terperinci Bagaimana cara 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