c#将int型转换为float抛出异常(在运行时)
本文关键字:抛出异常 运行时 float int 转换 | 更新日期: 2023-09-27 17:50:07
这会抛出一个异常,表示源不能强制转换为目标:
int a = 1;
object b = (object)a;
float c = (float)b; // Exception here
为什么?
您只能将盒装结构体强制转换为确切的类型,因此您需要首先将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中的历史问题):
- 装箱/拆箱 <
- 转换数字/gh>
- 铸造
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