【发布时间】:2009-12-08 06:36:56
【问题描述】:
可能的重复:
Enumerable.Cast<T> extension method fails to cast from int to long, why ?
Puzzling Enumerable.Cast InvalidCastException
Cast/Convert IEnumerable<T> to IEnumerable<U> ?
我正在尝试将整数数组转换为双精度数组(这样我就可以将它传递给一个接受双精度数组的函数)。
最明显的解决方案(至少对我而言)是对 IEnumerable 使用 Cast 扩展函数,但它给了我一个 InvalidCastException,我不明白为什么。我的解决方法是改用 Select,但我认为 Cast 看起来更整洁。
谁能告诉我为什么 Cast 方法不起作用?
希望下面的代码能说明我的问题:
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()));
}
}
}
【问题讨论】:
-
哎呀...在询问之前我没有仔细检查堆栈溢出。我发现我的问题已经被问及回答了:stackoverflow.com/questions/1684448/…
标签: c# .net ienumerable type-conversion casting