无法从double转换为int

时间:2013-07-15 20:53:46

标签: c# sharepoint

我正在使用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;

它的工作原理与预期一样。

为什么它会在一个设置中工作但在另一个设置中失败?

3 个答案:

答案 0 :(得分:9)

这是一个非常常见的问题。您无法将装箱T 取消装箱至TT?以外的任何其他内容。

我在这里解释原因:

http://ericlippert.com/2009/03/03/representation-and-identity/

答案 1 :(得分:2)

但这应该对你有用

(int?)(double)re["mi"];

<强> EDIT1 如果盒装类型是双倍的话,上面的代码将起作用,如果是double?则不起作用 使它工作做以下

(int?)(double?)re["mi"];

答案 2 :(得分:0)

这是因为您尝试将对象转换为整数。您的小数值已装箱。

Conciser this:

object o = 2.0d;

int i = (int)((double) o); // This will work