Rumah > pembangunan bahagian belakang > C++ > Mengapa saya tidak dapat menyenaraikan senarai ke C#?

Mengapa saya tidak dapat menyenaraikan senarai ke C#?

Mary-Kate Olsen
Lepaskan: 2025-02-02 05:16:09
asal
201 orang telah melayarinya

Why Can't I Assign List to List in C#?

C# Generik Perbezaan: Menetapkan senarai & lt;

Apabila menggunakan senarai generik dalam C#, cuba tetapkan senarai jenis yang diperoleh kepada senarai jenis jenis yang diperoleh. Masalah ini disebabkan oleh konflik antara jenis keselamatan dan penyusunan keselamatan jenis semasa runtime. Soalan dan Contoh Kod

Pertimbangkan kod berikut:

Dalam contoh ini, disebabkan oleh pemeriksaan runtime, ia adalah berkesan untuk menetapkan pelbagai zirafah ke array haiwan. Walau bagaimanapun, pengedaran senarai untuk menyenaraikan

akan menyebabkan kesilapan semasa penyusunan.

isu yang berbeza dan keselamatan
<code class="language-csharp">class Animal { }
class Giraffe : Animal { }

static void Main(string[] args)
{
    // 数组赋值有效,但是...
    Animal[] animals = new Giraffe[10]; 

    // 隐式转换失败
    List<Animal> animalsList = new List<Giraffe>(); //编译错误

    // 显式转换也失败
    List<Animal> animalsList2 = (List<Animal>) new List<Giraffe>(); //编译错误
}</code>
Salin selepas log masuk

Masalah ini berkaitan dengan konsep varians dalam jenis generik. Penyelarasan membolehkan penggunaan jenis yang diperolehi dalam kedudukan jenis asas, dan penyongsang membolehkan penggunaan jenis asas dalam kedudukan jenis yang diperolehi. Dalam contoh di atas, senarai memberikan nilai ke senarai

akan dianggap sebagai perubahan yang diselaraskan.

Walau bagaimanapun, tugasan ini boleh menyebabkan masalah keselamatan. Sekiranya objek singa baru ditambah kepada haiwan, ia boleh diberikan kepada AnimalsList2 tanpa sebarang pemeriksaan kompilasi, walaupun ia melanggar jenis keselamatan jenis haiwan. Penyelesaian dalam C#

Gunakan array untuk berjalan semasa runtime: Arahan ini menyokong varians jenis rujukan semasa runtime, yang membolehkan memberikan array jenis yang diperolehi ke array jenis asas.

C# 4 Perbezaan Square Square:

C# 4 memperkenalkan sokongan untuk varians keselamatan antara muka dan permohonan. Func adalah perubahan yang diselaraskan dalam T, dan tindakan

terbalik dalam T. C# 2 Kaedah:

Dalam C# 2, anda boleh menggunakan senarai

.convertall Untuk membuat senarai baru dengan jenis yang diperlukan. Kesimpulan

masalah varians C#menyoroti kepentingan mengekalkan keselamatan jenis semasa tugasan generik. Walaupun bilangan pemeriksaan array atau runtime boleh digunakan untuk mencapai dataran yang tidak selamat, varians keselamatan dengan antara muka dan permohonan dapat memastikan jenis jenis yang betul semasa penyusunan. Untuk versi awal C#, anda boleh menggunakan Senarai .Convertall sebagai penyelesaian alternatif.

Atas ialah kandungan terperinci Mengapa saya tidak dapat menyenaraikan senarai ke 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