问题
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