关于 c#:int to double 上的无效强制转换异常
invalid cast exception on int to double
也许我疯了,但我认为这是一个有效的演员阵容:
|
(new int[]{1,2,3,4,5}).Cast<double>()
|
为什么 LinqPad 会抛出一个
InvalidCastException: Specified cast is not valid.
?
相关讨论
- 另请参阅Why-cant-i-unbox-an-int-as-a-decimal。关系很密切。。
C# 允许从
|
int i = 1;
object o = i; double d1 = (double)i; // okay double d2 = (double)o; // error |
您可以尝试
相关讨论
- 另一种思考方式是 C# 强制转换运算符(方括号)同时执行显式类型强制(int -> double)和类型转换(检查从一种类型到另一种兼容引用的引用转换)。但 Linqs Cast 方法只做后者。
- @OliverBock 这是一种有效的思考方式,但老实说,我认为您在命名演员表的两种含义之间所做的区分并不被广泛接受。
-
哎呀!但我想知道为什么
value types 会失败。如果是两个reference type 变量的情况,其中两种类型中的一种可以转换为另一种,那么这不会失败。我想知道当 CTS 中的每种类型都继承自System.Object 时,为什么 C# 只为value types 以这种方式实现它? -
有趣的是,这段代码
object obj = 2; double d1 = (double)i; okay 没有给出错误。我确定这里 2 在分配给obj 时必须被运行时隐式视为整数。 -
@RBT
(double)i 可能不会出错,但(double)obj 应该。