Maison >développement back-end >C++ >Pourquoi « Enumerable.Cast » lance-t-il une « InvalidCastException » lors de la conversion de « IEnumerable » en « IEnumerable » ?

Pourquoi « Enumerable.Cast » lance-t-il une « InvalidCastException » lors de la conversion de « IEnumerable » en « IEnumerable » ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-10 09:57:41643parcourir

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

Comprendre Enumerable.Cast et InvalidCastException en C#

Une erreur C# courante se produit lors de l'utilisation de Enumerable.Cast<T> pour convertir un IEnumerable<int> en un IEnumerable<long>. L'inattendu InvalidCastException survient malgré l'apparente compatibilité des types.

La raison réside dans le fonctionnement de Enumerable.Cast<T>. Ce n'est pas une méthode spécialisée pour les collections génériques ; il fonctionne au niveau IEnumerable, en travaillant avec des valeurs non encadrées.

Par conséquent, lors de la diffusion d'éléments à partir d'un IEnumerable<int>, chaque int est déjà encadré comme un object. Tenter de convertir un int en boîte en un long échoue directement, ce qui entraîne le InvalidCastException.

La solution consiste à caster explicitement chaque élément dans une requête :

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

Cette méthode Select effectue la conversion de int en long pour chaque élément, évitant ainsi le problème de boxe. Cette conversion directe contourne les limitations de Enumerable.Cast<T> lors du traitement des conversions de type valeur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn