相关疑难解决方法(0)

为什么我不能将int取消装入十进制?

我有一个IDataRecord reader我正在检索小数,如下所示:

decimal d = (decimal)reader[0];
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这会抛出一个无效的强制转换异常,说"指定的强制转换无效".

当我这样做reader[0].GetType()时告诉我它是Int32.据我所知,这应该不是问题....

我已经通过这个片段测试了这个,它运行得很好.

int i = 3750;
decimal d = (decimal)i;
Run Code Online (Sandbox Code Playgroud)

这让我头疼不已,想知道为什么它没有将读取器中包含的int取消装箱作为小数.

有谁知道为什么会这样?有什么微妙的我不见了吗?

c# int unboxing decimal

61
推荐指数
3
解决办法
2万
查看次数

CLR如何知道盒装对象的类型?

当值类型被装箱时,它被放置在无类型的引用对象内.那么是什么导致无效的强制转换异常?

long l = 1;
object obj = (object)l;
double d = (double)obj;
Run Code Online (Sandbox Code Playgroud)

c# clr boxing type-conversion

14
推荐指数
3
解决办法
1095
查看次数

将double转换为decimal时,为什么会出现InvalidCastException

我正在尝试调试一个获取InvalidCastException的应用程序.失败的路线是

decimal d = (decimal)row[denominator];
Run Code Online (Sandbox Code Playgroud)

在调试器中检查这个(见下面的截图),row [denominator]保持一个值为8.0的double,据我所知.Surly应该没有任何问题将其转换为小数?

('row'类型来自3.派对库,它再次来自MySQL的数据.当针对较旧的MySQL服务器进行测试时会出现问题,该服务器显然会在MySQL 5.1上将某些聚合返回为double vs decimal - 同样的查询,完全相同数据库中的数据副本)

Visual Studio截图http://img18.imageshack.us/img18/3897/invaldicast.png

有关如何进一步调查此问题的任何帮助?

.net c# exception

7
推荐指数
2
解决办法
7611
查看次数

为什么downcast在运行时失败

我想知道为什么下面的downcast失败@运行时间:

情况1:

Object y = 10.23;
Console.WriteLine(y.GetType()); //System.Double
int z = (int)y;// fails @ runtime
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

案例2:

Double y = 10.23;
Console.WriteLine(y.GetType());//System.Double
int z = (int)y;//success
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,y的类型是System.Double,仍然为什么在第一种情况下downcst失败?

c# casting

3
推荐指数
1
解决办法
468
查看次数

标签 统计

c# ×4

.net ×1

boxing ×1

casting ×1

clr ×1

decimal ×1

exception ×1

int ×1

type-conversion ×1

unboxing ×1