将0.0转换为双倍有什么问题?

Jie*_*eng 27 .net c# casting

我有InvalidCastException当我尝试投0.0到两倍,这是为什么呢?我这样做很好(float)value.

替代文字

Kon*_*lph 61

通常,当您将值类型放入object(称为装箱)时,您需要将其拆分完全相同的值类型.您无法转换为其他类型.这就是这里发生的事情.

如果您真的想要转换对象,首先需要将其解包.假设您的原始价值是float在您将其装箱之前object:

double d = (double) (float) value;
Run Code Online (Sandbox Code Playgroud)

或者使用其他人提出的方法,使用Convert.这具有不必知道原始类型的优点.

  • +1用于明确暴露真实问题:拳击. (13认同)
  • 我警告说使用`Convert`并不等同于上面的双重转换,因为如果转换后的对象碰巧是'null`,`Convert`将默默返回零,而双重转换将在第一次转换时失败,因为你会期望从任何非浮点值发生,例如`null`.记住,`null`不是'0`,而是'Convert`. (5认同)

Dar*_*rov 11

这很正常.如果对象类型是float您无法将其强制转换为double因为它们的类型不同:

object o = 1.0f;
double d = (double)o; // will throw an exception
Run Code Online (Sandbox Code Playgroud)

你需要转换它:

double d = Convert.ToDouble(o);
Run Code Online (Sandbox Code Playgroud)

  • 你的解释很混乱,因为你无法区分底层对象类型(浮点数)和变量类型(对象)并明确提到装箱.正如@Aliostad指出的那样,它可以被解释为意味着你不能将浮动(未装箱)向上转换为双重,这显然是错误的. (6认同)
  • 你在说什么?!所以你不能这样做?float f = 0.0f; double d =(double)f; (3认同)