Rumah > pembangunan bahagian belakang > C++ > Kenapa tidak boleh `senarai` secara langsung ditugaskan ke pembolehubah` senarai` dalam C#?

Kenapa tidak boleh `senarai` secara langsung ditugaskan ke pembolehubah` senarai` dalam C#?

Mary-Kate Olsen
Lepaskan: 2025-01-28 13:31:09
asal
887 orang telah melayarinya

Why Can't a `List` Be Directly Assigned to a `List` Variable in C#?

mengapa tidak boleh diberikan

ke List<string> dalam c#? List<object>

di C#, secara langsung menyerahkan

ke List<string> hasil pembolehubah dalam ralat pengkompil. Penukaran tersirat tidak dibenarkan, dan pemutus eksplisit menggunakan List<object> juga gagal. (List<object>)

Alasan:

sekatan ini disebabkan oleh keselamatan jenis. Bayangkan jika tugasan sedemikian dibenarkan. Anda kemudian boleh menambah objek jenis selain daripada

(mis., Integer atau kelas tersuai) ke string. Walau bagaimanapun, ini List<object> pada asalnya adalah List<object>. Percubaan untuk mengakses unsur-unsur dari senarai ini menggunakan rujukan List<string> akan membawa kepada string apabila menghadapi elemen bukan tali. Pengkompil menghalang kesilapan runtime yang berpotensi ini dengan tidak membenarkan tugasan. System.InvalidCastException

penyelesaian:

Walaupun tugasan langsung tidak mungkin, anda boleh mencapai kesan yang dikehendaki menggunakan kaedah alternatif:

  1. Penyalinan berulang: Pendekatan yang paling mudah adalah untuk berulang melalui dan tambahkan setiap elemen secara individu ke List<string> yang baru. List<object>

  2. linq: penyelesaian yang lebih ringkas menggunakan kaedah LINQ : Cast<T>

    List<string> stringList = new List<string> { "apple", "banana", "cherry" };
    List<object> objectList = stringList.Cast<object>().ToList();
    Salin selepas log masuk

Casting Reverse:

Cast Reverse -From

hingga List<object> - adalah perkara yang berbeza. Ini biasanya List<string> tidak dibenarkan melainkan jika anda benar -benar yakin bahawa setiap elemen dalam sebenarnya adalah List<object>. Percubaan untuk dibuang apabila ini tidak benar akan menghasilkan pengecualian runtime. C# menguatkuasakan keselamatan jenis untuk mencegah senario tersebut. Anda perlu melakukan cek atau menggunakan kaedah LINQ string untuk menyaring dengan selamat dan hanya membuang elemen rentetan. OfType<T> Oleh itu, sementara operasi terbalik mungkin kelihatan sama, mekanisme keselamatan jenis yang mendasari di C# menghalangnya daripada menjadi operasi yang mudah. Pertimbangan yang teliti terhadap jenis elemen adalah penting apabila bekerja dengan senarai generik dan penukaran jenis.

Atas ialah kandungan terperinci Kenapa tidak boleh `senarai` secara langsung ditugaskan ke pembolehubah` 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan