Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghantar Senarai ke Senarai dalam C#?
Menukar Senarai Kelas Terbitan kepada Senarai Kelas Asas dalam C#
Contoh ini menunjukkan masalah biasa: menghantar senarai objek kelas terbitan (cth., List<Cat>
) kepada kaedah yang mengharapkan senarai objek kelas asas (List<Animal>
). Tugasan langsung tidak dibenarkan kerana rujukan kelas asas tidak boleh menunjuk terus kepada objek kelas terbitan.
Isunya:
Percubaan untuk menghantar List<Cat>
kepada kaedah dengan parameter List<Animal>
mengakibatkan ralat pengkompil.
Penyelesaian: Menggunakan IEnumerable
dan Kovarians
Penyelesaian itu memanfaatkan kovarians generik C#. Daripada menggunakan List<Animal>
, tukar jenis parameter kaedah kepada IEnumerable<Animal>
. IEnumerable
ialah antara muka baca sahaja; ini menghalang kaedah daripada mengubah suai koleksi asal, menangani kebimbangan keselamatan jenis yang berpotensi.
Kod Disemak:
<code class="language-csharp">class Animal { public virtual void Play(IEnumerable<Animal> animals) { } } class Cat : Animal { public override void Play(IEnumerable<Animal> animals) { //Implementation } } class Program { static void Main() { Cat myCat = new Cat(); myCat.Play(new List<Cat>()); // This now compiles successfully } }</code>
Ini berfungsi kerana List<Cat>
secara tersirat menukar kepada IEnumerable<Cat>
dan IEnumerable<Cat>
adalah kovarian dengan IEnumerable<Animal>
. Kaedah Play
kini boleh berulang dengan selamat melalui koleksi tanpa cuba mengubah suainya. Pendekatan ini mengekalkan keselamatan jenis sambil membenarkan parameterisasi kaedah yang fleksibel.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Senarai ke Senarai dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!