Heim >Backend-Entwicklung >C++ >Warum löst „Enumerable.Cast' eine „InvalidCastException' aus, wenn „IEnumerable' in „IEnumerable' umgewandelt wird?

Warum löst „Enumerable.Cast' eine „InvalidCastException' aus, wenn „IEnumerable' in „IEnumerable' umgewandelt wird?

Barbara Streisand
Barbara StreisandOriginal
2025-01-10 09:57:41603Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn