C# 指定的强制转换无效(双精度到int)

C# 指定的强制转换无效(双精度到int),c#,casting,C#,Casting,这里我需要将双精度转换为整数 示例: obj.DayDifference = !string.IsNullOrEmpty(reader["DateDiff"].ToString()) ? (Int32)reader["DateDiff"] : 0; 类型: obj.DayDifference = !string.IsNullOrEmpty(reader["DateDiff"].ToString()) ? (Int32)re

这里我需要将双精度转换为整数

示例

obj.DayDifference = !string.IsNullOrEmpty(reader["DateDiff"].ToString()) ?   
               (Int32)reader["DateDiff"] : 0;
类型

obj.DayDifference = !string.IsNullOrEmpty(reader["DateDiff"].ToString()) ?   
               (Int32)reader["DateDiff"] : 0;
  • 类型
    int

  • 数据库表中
    双精度
    类型的
    DateDiff

错误

obj.DayDifference = !string.IsNullOrEmpty(reader["DateDiff"].ToString()) ?   
               (Int32)reader["DateDiff"] : 0;
指定的强制转换无效


你所做的相当于:

object x = 32.5;
int y = (int) x;
您不能这样做-取消装箱时,必须取消装箱到实际类型的值1

因此,您需要:

object x = 32.5;
int y = (int) (double) x;
double
的转换将取消装箱,对
int
的转换将
double
转换为
int
。您可以在代码中执行相同的操作:

(Int32)(Double) reader["DateDiff"] : 0;


1,对一些东西进行模化。CLR允许您将
int
解装箱到
uint
或基础类型为
int
的枚举类型,等等。

您所做的工作相当于:

object x = 32.5;
int y = (int) x;
您不能这样做-取消装箱时,必须取消装箱到实际类型的值1

因此,您需要:

object x = 32.5;
int y = (int) (double) x;
double
的转换将取消装箱,对
int
的转换将
double
转换为
int
。您可以在代码中执行相同的操作:

(Int32)(Double) reader["DateDiff"] : 0;


1,对一些东西进行模化。CLR允许您将
int
解装箱到
uint
或基础类型为
int
的枚举类型,等等。

读取器[“DateDiff”]
的值到底是多少?调试并告诉我们。@SonerGönül,
DateDiff
200组成。
reader[“DateDiff”]
的值到底是多少?调试并告诉我们。@SonerGönül,
DateDiff
compost
value
200。是的!我得到了它。非常感谢,是的!我得到了它。非常感谢你。