24

也许我疯了,但我认为这是一个有效的演员表:

(new int[]{1,2,3,4,5}).Cast<double>()

为什么 LinqPad 会抛出一个

InvalidCastException:指定的强制转换无效。

?

4

1 回答 1

37

C# 允许int直接从 to 转换double,但不允许从intto objectto 转换double

int i = 1;
object o = i;
double d1 = (double)i; // okay
double d2 = (double)o; // error

扩展方法的Enumerable.Cast行为类似于后者。它不会将值转换为不同的类型,它会断言值已经是预期的类型,如果不是则抛出异常。

您可以尝试(new int[]{1,2,3,4,5}).Select(i => (double)i)获得价值转换行为。

于 2012-09-28T20:41:32.193 回答