无法从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;

正如预期的那样,它是有效的。

为什么它在一种设置中有效,但在另一种设置下失败?

无法从double强制转换为int

这是一个经常被问到的问题。您不能将装箱的T取消装箱为TT?以外的任何内容。

我在这里解释原因:

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