首頁 > 後端開發 > C++ > 為什麼將'IEnumerable”轉換為'IEnumerable”時,'Enumerable.Cast”會拋出'InvalidCastException”?

為什麼將'IEnumerable”轉換為'IEnumerable”時,'Enumerable.Cast”會拋出'InvalidCastException”?

Barbara Streisand
發布: 2025-01-10 09:57:41
原創
605 人瀏覽過

Why Does `Enumerable.Cast` Throw an `InvalidCastException` When Casting `IEnumerable` to `IEnumerable`?

理解 C# 中的 Enumerable.CastInvalidCastException

使用 Enumerable.Cast<T>IEnumerable<int> 轉換為 IEnumerable<long> 時會出現常見的 C# 錯誤。 儘管表面上存在類型相容性,但還是出現了意外的 InvalidCastException

原因在於Enumerable.Cast<T>的功能。 它不是通用集合的專用方法;它在 IEnumerable 層級運行,使用未裝箱的值。

因此,當從 IEnumerable<int> 投射元素時,每個 int 已經被裝箱為 object。 試著將盒裝 int 轉換為 long 直接失敗,導致 InvalidCastException.

解決方案是明確轉換查詢中的每個元素:

<code class="language-csharp">var castedList = list.Select(i => (long)i);</code>
登入後複製

Select 方法對每個項目執行從 intlong 的轉換,避免裝箱問題。 這種直接轉換規避了 Enumerable.Cast<T> 在處理值類型轉換時的限制。

以上是為什麼將'IEnumerable”轉換為'IEnumerable”時,'Enumerable.Cast”會拋出'InvalidCastException”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板