Casting a boxed value

北城余情 提交于 2019-12-18 05:43:29

问题


Why can't an int that's been boxed be directly cast to double?

object o = 12;
double d = (double)o;

That throw an invalid cast exception. Instead it seems it has to first be cast as an int, and then on to double.

object o = 12;
double d = (double)(int)o;

I'm sure the simple answer is "because that's how boxing works" but I'm hoping someone might shed a bit of light here.


回答1:


Check out this question from earlier today: Why am I getting InvalidCastException?

Unboxing operations only succeed if the target type is exactly the same as the original type that was boxed, so an exception is thrown. This link that John Leidegren provided explains in detail.




回答2:


If you don't know the original type at compile-time:

object o = 12;
double d = (double)Convert.ChangeType(o, typeof(double));


来源:https://stackoverflow.com/questions/5312731/casting-a-boxed-value

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!