Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghantar Senarai ke Senarai dalam C#?

Bagaimanakah Saya Boleh Menghantar Senarai ke Senarai dalam C#?

DDD
DDDasal
2025-01-09 22:41:41443semak imbas

How Can I Cast a List to a List in 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!

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