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
Libérer: 2025-01-10 09:57:41
original
605 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal