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.