mögliche Dubletten:
Enumerable.Cast<T> extension method fails to cast from int to long, why ?
Puzzling Enumerable.Cast InvalidCastException
Cast/Convert IEnumerable<T> to IEnumerable<U> ?Warum wird Cast <double>() auf IEnumerable <int> nicht funktionieren?
Ich versuche, ein Array von ganzen Zahlen in ein Array von Doppel zu konvertieren (so kann ich es an eine Funktion, die nimmt eine Reihe von Doppel).
Die offensichtlichste Lösung (zumindest für mich) ist die Verwendung der Cast-Erweiterungsfunktion für IEnumerable, aber es gibt mir eine InvalidCastException, und ich verstehe nicht warum. Meine Problemumgehung besteht darin, Select zu verwenden, aber ich denke, Cast sieht ordentlicher aus.
Kann mir jemand sagen, warum die Cast-Methode nicht funktioniert?
Hoffentlich wird der Code unten zeigt mein Problem:
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()));
}
}
}
Hoppla ... Ich habe Stack Overflow nicht sorgfältig genug geprüft, bevor ich gefragt habe. Ich habe festgestellt, dass meine Frage bereits gestellt und beantwortet wurde: http://stackoverflow.com/questions/1684448/enumerable-castt-extension-method-fails-to-cast-from-int-to-long-why – dominic