duplicados posibles:
Enumerable.Cast<T> extension method fails to cast from int to long, why ?
Puzzling Enumerable.Cast InvalidCastException
Cast/Convert IEnumerable<T> to IEnumerable<U> ?¿Por qué no Cast <double>() funciona en IEnumerable <int>?
Estoy tratando de convertir una matriz de enteros a una serie de dobles (por lo que puede pasar a una función que toma un conjunto de dobles).
La solución más obvia (para mí, al menos) es utilizar la función de extensión de Cast para IEnumerable, pero me da una InvalidCastException, y no entiendo por qué. Mi solución es utilizar Select en su lugar, pero creo que Cast se ve más ordenado.
¿Podría alguien decirme por qué el método Cast no funciona?
Esperemos que el código de abajo ilustra mi problema:
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 ... No revisé el desbordamiento de pila con suficiente cuidado antes de preguntar. Encontré que mi pregunta ya fue hecha y respondida: http://stackoverflow.com/questions/1684448/enumerable-castt-extension-method-fails-to-cast-from-int-to-long-why – dominic