Adam Rackis Adam Rackis - 3 months ago 24
C# Question

Casting a boxed value

Why can't an

that's been boxed be directly cast to

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

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

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.


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.