此抛出要说源不能被铸造到目的地的异常:C#铸造INT浮动抛出异常(在运行时)
int a = 1;
object b = (object)a;
float c = (float)b; // Exception here
为什么?
此抛出要说源不能被铸造到目的地的异常:C#铸造INT浮动抛出异常(在运行时)
int a = 1;
object b = (object)a;
float c = (float)b; // Exception here
为什么?
您只能投盒装结构的确切类型,所以你需要投下第一INT:
float c = (float)(int)b;
但是因为有一个隐式转换从int浮动,你可以这样做:
float c = (int)b;
据我知道那是因为你存储箱“a”作为一个int之后,你拆箱它作为一个浮动,这不会工作...
得到它的权利,你应该做的浮法C =( float)(int)b;
您不能将一个数据类型的值从一种数据类型转换为另一种数据类型。您需要先将其恢复到原来的类型,然后将其拉出。或者,您可以使用Convert.To*
方法,例如
Object a = 6;
Double b = Convert.ToDouble(a);
铸造具有不同的含义。在这种情况下,它意味着“unbox”,而不是“做数字转换”。
看看6个含义在这里:
的问题是,同样的语法(从C的历史问题),重复使用3个操作:
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
UL/OL对解析器很有趣,你需要在它们之间添加一些东西。在这种情况下,我使用了一个任意的虚假HTML标签(如调用格式,但不会干扰帖子本身)。 – 2011-04-11 22:38:15
这个问题是问非常频繁的SO。有关详细信息,请参阅关于此主题的文章。
http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx
[Why \ [(int)(object)10m; \]确实抛出“指定的转换无效”异常?](http://stackoverflow.com/questions/3953391/why-intobject10m-does-throw-specified-cast-is-not-valid-exception) – 2011-04-11 22:30:03