c#将int型转换为float抛出异常(在运行时)

本文关键字:抛出异常 运行时 float int 转换 | 更新日期: 2023-09-27 17:50:07

这会抛出一个异常,表示源不能强制转换为目标:

int a = 1;
object b = (object)a;
float c = (float)b; // Exception here

为什么?

c#将int型转换为float抛出异常(在运行时)

您只能将盒装结构体强制转换为确切的类型,因此您需要首先将a强制转换为int:

float c = (float)(int)b;

然而,因为有一个隐式的从int到float的转换,你可以这样做:

float c = (int)b;

据我所知,这是因为你将"a"装箱为整型,然后将其拆箱为浮点型,这不起作用…

你应该使用float c = (float) (int) b;

您不能将值从一种数据类型unbox(强制转换为object并返回)到另一种数据类型。你需要先把它恢复到原来的形状,然后再把它拔出来。或者,您可以使用Convert.To*方法,例如

Object a = 6;
Double b = Convert.ToDouble(a);

后续:http://www.ideone.com/hgeob

问题是相同的语法在3个操作中被重用(C中的历史问题):

  1. 装箱/拆箱
  2. <
  3. 转换数字/gh>
  4. 铸造

int a = 1; // Ok
object b = (object)a; // Ok. int is struct so we may box it into object
float c = (float)a; // Ok. Conversion from integer to float
float c = (float)b; // Error. object b is not boxed float
相关文章: