Doublons possibles:
Enumerable.Cast<T> extension method fails to cast from int to long, why ?
Puzzling Enumerable.Cast InvalidCastException
Cast/Convert IEnumerable<T> to IEnumerable<U> ?Pourquoi ne pas diffuser <double>() travail sur IEnumerable <int>?
Je suis en train de convertir un tableau d'entiers à un tableau de doubles (donc je peux passer à une fonction qui prend un tableau de doubles).
La solution la plus évidente (pour moi, au moins) est d'utiliser la fonction d'extension Cast pour IEnumerable, mais elle me donne une exception InvalidCastException, et je ne comprends pas pourquoi. Ma solution consiste à utiliser Select à la place, mais je pense que Cast semble plus propre.
Quelqu'un pourrait-il me dire pourquoi la méthode Cast ne fonctionne pas?
Espérons que le code ci-dessous illustre mon problème:
namespace ConsoleApplication1
{
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
var intArray = new[] { 1, 2, 3, 4 };
PrintEnumerable(intArray, "intArray: ");
var doubleArrayWorks = intArray.Select(x => (double)x).ToArray();
PrintEnumerable(doubleArrayWorks, "doubleArrayWorks: ");
// Why does this fail??
var doubleArrayDoesntWork = intArray.Cast<double>().ToArray();
PrintEnumerable(doubleArrayDoesntWork, "doubleArrayDoesntWork: ");
// Pause
Console.ReadLine();
}
private static void PrintEnumerable<T>(
IEnumerable<T> toBePrinted, string msgPrefix)
{
Console.WriteLine(
msgPrefix + string.Join(
",", toBePrinted.Select(x => x.ToString()).ToArray()));
}
}
}
Ooops ... Je n'ai pas vérifié avec soin le débordement de la pile avant de le demander. J'ai trouvé ma question a déjà été posée et a répondu: http://stackoverflow.com/questions/1684448/enumerable-castt-extension-method-fails-to-cast-from-int-to-long-why – dominic