Rumah > pembangunan bahagian belakang > C++ > Mengapa saya tidak dapat memberikan senarai ke senarai di C#?

Mengapa saya tidak dapat memberikan senarai ke senarai di C#?

Susan Sarandon
Lepaskan: 2025-02-01 17:51:12
asal
707 orang telah melayarinya

Why Can't I Assign a List to a List in C#?

c# Dalam pengaturcaraan yang berorientasikan objek, warisan kelas yang diperolehi sangat biasa. Walau bagaimanapun, apabila memproses set (seperti senarai), mengapa tidak mungkin menggunakan kelas asas yang sama untuk mengisytiharkannya, yang mungkin mengelirukan.

Pertimbangkan kod berikut:

Kod ini akan menyebabkan kesilapan kompilasi apabila cuba menggunakan
<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>
Salin selepas log masuk

. Walaupun contoh Kelas C yang diperolehi boleh diberikan kepada pembolehubah kelas asas A, koleksi itu tidak baik. List<C> List<A> Alasan untuk had ini terletak pada kaedah senarai permulaan C#. Apabila membuat , C# akan menjana struktur data dalaman senarai semasa berjalan, dan diharapkan jenis penyimpanan adalah objek A. Walau bagaimanapun, kerana C adalah kelas derivatif A, objeknya mempunyai ahli tambahan dan menduduki lebih banyak ingatan daripada objek. Oleh itu, penugasan ke

akan menyebabkan alamat memori terputus, yang boleh menyebabkan kesilapan ingatan.

List<A> Untuk menyelesaikan masalah ini dan ubah List<C> sebagai List<A>, anda boleh menggunakan kaedah berikut:

<.> 1. Mengekspresikan penukaran: List<派生类> List<基类>

melintasi senarai dan secara eksplisit menukar setiap elemen ke dalam kelas asas:

<.> 2. LINQ:

Gunakan LINQ untuk menukar elemen seperti berikut:
<code class="language-csharp">List<A> listOfA = new List<C>().ConvertAll(x => (A)x);</code>
Salin selepas log masuk

Kaedah ini membolehkan penukaran dan penjajaran alamat memori yang selamat untuk memastikan operasi normal senarai.

Atas ialah kandungan terperinci Mengapa saya tidak dapat memberikan senarai ke senarai di 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