Pertimbangkan kod berikut:
Kod ini akan menyebabkan kesilapan kompilasi apabila cuba menggunakan
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>(); // 编译错误 } }
. 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
List<A>
Untuk menyelesaikan masalah ini dan ubah List<C>
sebagai List<A>
, anda boleh menggunakan kaedah berikut:
<.> 1. Mengekspresikan penukaran: List<派生类>
List<基类>
<.> 2. LINQ:
Gunakan LINQ untuk menukar elemen seperti berikut:
List<A> listOfA = new List<C>().ConvertAll(x => (A)x);
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!