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

Bagaimanakah Saya Boleh Menghantar Senarai dengan Selamat ke Senarai dalam C#?

Susan Sarandon
Lepaskan: 2025-01-09 22:36:42
asal
283 orang telah melayarinya

How Can I Safely Cast a List to List in C#?

Tukar Senarai kepada Senarai

dalam C#

Apabila berurusan dengan warisan, kadangkala perlu menukar senarai objek kelas terbitan kepada senarai objek kelas asas. Walau bagaimanapun, ini boleh membawa kepada ralat jika tidak dikendalikan dengan betul.

Ralat dalam penukaran senarai menggunakan data boleh tulis

Pertimbangkan kod berikut:

<code class="language-c#">using System;
using System.Collections.Generic;

class Animal
{
    public virtual void Play(List<Animal> animal) { }
}

class Cat : Animal
{
    public override void Play(List<Animal> animal) { }
}

class Program
{
    static void Main(string[] args)
    {
        Cat cat = new Cat();
        cat.Play(new List<Cat>());
    }
}</code>
Salin selepas log masuk

Kod ini akan menjana ralat kompilasi disebabkan oleh ketidakpadanan dalam jenis objek senarai. Haiwan mengharapkan senarai jenisnya sendiri (Haiwan), tetapi kaedah ini dipanggil dengan senarai objek Kucing.

Sebab ralat

Ralat ini berlaku kerana senarai boleh ditulis. Jika penukaran dibenarkan, ia boleh menyebabkan masalah manipulasi data. Contohnya, objek anjing boleh ditambahkan pada senarai kucing, yang akan melanggar keselamatan jenis.

Kovarians generik

Dalam C# 4, satu ciri yang dipanggil kovarians generik telah diperkenalkan. Ini membenarkan senarai kelas terbitan ditukar kepada senarai kelas asas, dengan syarat jenis ini memastikan keselamatan jenis. Contoh jenis selamat untuk kovarians generik ialah IEnumerable<T>, yang mewakili jujukan objek tetapi tidak boleh ditulis padanya.

Melaksanakan kovarians generik

Untuk melaksanakan kovarians generik, anda boleh menukar tandatangan kaedah dalam kelas asas untuk menggunakan IEnumerable<T> sebagai jenis parameter, seperti ini:

<code class="language-c#">class Animal
{
    public virtual void Play(IEnumerable<Animal> animals) { }
}

class Cat : Animal
{
    public override void Play(IEnumerable<Animal> animals) { }
}

class Program
{
    static void Main()
    {
        Cat cat = new Cat();
    cat.Play(new List<Cat>());
    }
}</code>
Salin selepas log masuk

Dalam contoh ini, kaedah Main dalam Haiwan mengambil IEnumerable<Animal> sebagai parameter, yang membolehkannya menerima jujukan objek Haiwan dan Kucing.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Senarai dengan Selamat ke Senarai dalam 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