Rumah >pembangunan bahagian belakang >C++ >Mengapa saya tidak boleh membuang `senarai` ke` senarai` dalam C#?
tidak boleh ditukar kepada List<string>
? List<object>
ke List<string>
pembolehubah untuk menyebabkan kelainan yang menarik. Kenapa penukaran ini tidak dibenarkan dan selalu mengganggu banyak pemaju. List<object>
Pertimbangkan serpihan kod berikut:
Percubaan penukaran minat dan eksplisit gagal, yang membuat kita tertanya -tanya sebabnya.
<code class="language-csharp">List<string> sl = new List<string>(); List<object> ol; ol = sl; // 隐式转换不被允许 ol = (List<object>)sl; // 显式转换也失败</code>
punca akar
Sebab utama had ini ialah ketidakkonsistenan mungkin berlaku dalam senarai. Jika kita membenarkan penukaran ini dan kemudian tambahkan jenis ke senarai ke senarai, senarai rentetan akan menjadi tidak konsisten.
Apabila senarai pertama lelaran dirujuk, kita akan menemui penukaran kelas yang tidak normal, kerana contoh Foo
tidak dapat ditukar kepada rentetan. Konsistensi jenis penyelenggaraan adalah penting untuk memastikan integriti data dalam senarai.
penukaran terbalik: lebih banyak dalam perbincangan yang lebih baik Foo
Adakah penukaran ini dibenarkan? Walaupun ia kelihatan berguna, membolehkan penukaran ini mungkin ralat atau tidak konsisten semasa runtime. Dari kelas yang lebih umum () kepada penukaran kelas yang lebih spesifik (
Bolehkah penukaran terbalik berjaya dalam C#?
<code class="language-csharp">List<object> ol = new List<object>(); List<string> sl; sl = (List<string>)ol;</code>Tidak jelas sama ada penukaran terbalik ini sah di C#. Sekiranya ia sah, ia akan menyerlahkan perbezaan antara penukaran tersembunyi paparan dan penukaran eksplisit, dan yang terakhir nampaknya melanggar peraturan konsistensi jenis. Ujian dan penjelasan lanjut mengenai aspek ini akan sangat berharga.
Atas ialah kandungan terperinci Mengapa saya tidak boleh membuang `senarai` ke` senarai` dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!