ke List<string>
dalam c#? List<object>
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:
Penyalinan berulang: Pendekatan yang paling mudah adalah untuk berulang melalui dan tambahkan setiap elemen secara individu ke List<string>
yang baru. List<object>
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>
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!