无法从double强制转换为int
本文关键字:转换 int double | 更新日期: 2023-09-27 18:22:30
我在Sharepoint中使用了一小段代码,如下所示:
int? do_ = (int?)re["mi"]; // consider "re" a dictionary<string, object>;
等号右侧的表达式计算结果为Double
。为了确定double
,我double
-在监视窗口中检查了它(:D)。是的,这是一个System.Double
,进进出出。
然而,这一行抛出了一个异常:
指定的强制转换无效。
我正要用额头在桌子上打个凹痕,突然意识到,是的,你可以将double转换为int,尽管会丢失值的非整数部分(这实际上是我的情况)。我在编程的第一天就学会了这一点,在世界前进之前
因此,更确切地说,我创建了另一个解决方案,一个简单的控制台应用程序。我把这个代码放进去:
double dragon = 2.0;
int? i = (int?)dragon;
正如预期的那样,它是有效的。
为什么它在一种设置中有效,但在另一种设置下失败?
这是一个经常被问到的问题。您不能将装箱的T
取消装箱为T
或T?
以外的任何内容。
我在这里解释原因:
http://ericlippert.com/2009/03/03/representation-and-identity/
但这应该适用于
(int?)(double)re["mi"];
第1版如果boxed类型是double,则上面的代码将起作用,如果是double?
,则不起作用要使其工作,请执行以下
(int?)(double?)re["mi"];
这是因为您试图将对象强制转换为整数。您的十进制值已装箱。
Conciser this:
object o = 2.0d;
int i = (int)((double) o); // This will work