Rumah >pembangunan bahagian belakang >C++ >Mengapakah `Enumerable.Cast` Membuang `InvalidCastException` Apabila Menghantar `IEnumerable` kepada `IEnumerable`?

Mengapakah `Enumerable.Cast` Membuang `InvalidCastException` Apabila Menghantar `IEnumerable` kepada `IEnumerable`?

Barbara Streisand
Barbara Streisandasal
2025-01-10 09:57:41603semak imbas

Why Does `Enumerable.Cast` Throw an `InvalidCastException` When Casting `IEnumerable` to `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!

Kenyataan:
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