C#의 Enumerable.Cast
및 InvalidCastException
이해
Enumerable.Cast<T>
을 사용하여 IEnumerable<int>
을 IEnumerable<long>
로 변환할 때 일반적인 C# 오류가 발생합니다. 명백한 유형 호환성에도 불구하고 예상치 못한 InvalidCastException
이 발생합니다.
이유는 Enumerable.Cast<T>
의 기능에 있습니다. 이는 일반 컬렉션에 대한 특수한 방법이 아닙니다. IEnumerable
수준에서 작동하며 unboxed 값으로 작업합니다.
따라서 IEnumerable<int>
에서 요소를 캐스팅할 때 각 int
은 이미 object
으로 박스화되어 있습니다. 박스형 int
을 long
에 직접 캐스트하려는 시도가 실패하여 InvalidCastException
.
해결책은 쿼리 내의 각 요소를 명시적으로 캐스팅하는 것입니다.
<code class="language-csharp">var castedList = list.Select(i => (long)i);</code>
이 Select
메서드는 각 항목에 대해 int
에서 long
으로 변환을 수행하여 boxing 문제를 방지합니다. 이 직접 캐스트는 값 유형 변환을 처리할 때 Enumerable.Cast<T>
의 제한 사항을 우회합니다.
위 내용은 `IEnumerable`을 `IEnumerable`로 캐스팅할 때 `Enumerable.Cast`가 `InvalidCastException`을 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!