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
823 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>

    <code class="language-csharp">List<string> stringList = new List<string> { "apple", "banana", "cherry" };
    List<object> objectList = stringList.Cast<object>().ToList();</code>
    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!

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