Rumah >pembangunan bahagian belakang >C++ >Mengapakah `Enumerable.Cast` Membuang `InvalidCastException` Apabila Menghantar `IEnumerable` kepada `IEnumerable`?
Pemahaman Enumerable.Cast
dan InvalidCastException
dalam C#
Ralat C# biasa berlaku apabila menggunakan Enumerable.Cast<T>
untuk menukar IEnumerable<int>
kepada IEnumerable<long>
. InvalidCastException
yang tidak dijangka timbul walaupun terdapat keserasian jenis yang jelas.
Sebabnya terletak pada cara Enumerable.Cast<T>
berfungsi. Ia bukan kaedah khusus untuk koleksi generik; ia beroperasi pada tahap IEnumerable
, berfungsi dengan nilai tidak berkotak.
Oleh itu, apabila menghantar elemen daripada IEnumerable<int>
, setiap int
sudah berkotak sebagai object
. Percubaan untuk menghantar int
berkotak ke long
gagal secara langsung, mengakibatkan InvalidCastException
.
Penyelesaian adalah untuk menghantar setiap elemen secara eksplisit dalam pertanyaan:
<code class="language-csharp">var castedList = list.Select(i => (long)i);</code>
Kaedah Select
ini melakukan penukaran daripada int
kepada long
untuk setiap item, mengelakkan isu tinju. Pelakon langsung ini memintas pengehadan Enumerable.Cast<T>
apabila berurusan dengan penukaran jenis nilai.
Atas ialah kandungan terperinci Mengapakah `Enumerable.Cast` Membuang `InvalidCastException` Apabila Menghantar `IEnumerable` kepada `IEnumerable`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!