15

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.

Adam Rackis
  • 82,527
  • 56
  • 270
  • 393

2 Answers2

9

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.

Community
  • 1
  • 1
Mikael Östberg
  • 16,982
  • 6
  • 61
  • 79
6

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

object o = 12;
double d = (double)Convert.ChangeType(o, typeof(double));
Chris Xue
  • 2,317
  • 1
  • 25
  • 21