理解 C# 中的 Enumerable.Cast
和 InvalidCastException
使用 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
方法對每個項目執行從 int
到 long
的轉換,避免裝箱問題。 這種直接轉換規避了 Enumerable.Cast<T>
在處理值類型轉換時的限制。
以上是為什麼將'IEnumerable”轉換為'IEnumerable”時,'Enumerable.Cast”會拋出'InvalidCastException”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!