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!