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

Bagaimanakah Saya Boleh Menghantar Senarai ke Senarai dalam C#?

DDD
Lepaskan: 2025-01-09 22:41:41
asal
461 orang telah melayarinya

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:

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
    }
}
Salin selepas log masuk

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 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan