Heim >Backend-Entwicklung >C++ >Warum löst „Enumerable.Cast' eine „InvalidCastException' aus, wenn „IEnumerable' in „IEnumerable' umgewandelt wird?
Enumerable.Cast
und InvalidCastException
in C# verstehen
Ein häufiger C#-Fehler tritt auf, wenn Enumerable.Cast<T>
verwendet wird, um ein IEnumerable<int>
in ein IEnumerable<long>
zu konvertieren. Das Unerwartete InvalidCastException
ergibt sich trotz der scheinbaren Typkompatibilität.
Der Grund liegt in der Funktionsweise Enumerable.Cast<T>
. Es handelt sich nicht um eine spezielle Methode für generische Sammlungen. Es arbeitet auf der IEnumerable
-Ebene und arbeitet mit unverpackten Werten.
Daher ist beim Gießen von Elementen aus einem IEnumerable<int>
jedes int
bereits als object
eingerahmt. Der Versuch, ein umrahmtes int
direkt in ein long
umzuwandeln, schlägt fehl und führt zu InvalidCastException
.
Die Lösung besteht darin, jedes Element innerhalb einer Abfrage explizit umzuwandeln:
<code class="language-csharp">var castedList = list.Select(i => (long)i);</code>
Diese Select
-Methode führt die Konvertierung von int
in long
für jedes Element durch und vermeidet so das Boxing-Problem. Diese direkte Umwandlung umgeht die Einschränkungen von Enumerable.Cast<T>
beim Umgang mit Werttypkonvertierungen.
Das obige ist der detaillierte Inhalt vonWarum löst „Enumerable.Cast' eine „InvalidCastException' aus, wenn „IEnumerable' in „IEnumerable' umgewandelt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!