也许我有点疯狂,但我认为这是一个有效的转换:
(new int[]{1,2,3,4,5}).Cast<double>()
为什么 LinqPad 会抛出 InvalidCastException: Specified cast is not valid. 异常?C# 允许直接将 int
转换为 double
,但不允许从 int
转换为 object
再转换为 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)
来获得值转换的行为。
object obj = 2; double d1 = (double)i; // okay
没有报错。我相信在将2分配给obj
时,运行时会隐式地将其视为整数。 - RBT(double)i
可能不会出错,但是 (double)obj
应该会。 - user743382