Reputation: 88207
I have InvalidCastException
when I try to cast 0.0 to double, why is that so? It's fine when I do (float)value
instead.
Upvotes: 28
Views: 14086
Reputation: 545608
In general, when you put a value type into an object
(called boxing) you need to unbox it to the exact same value type. You cannot do a conversion to another type instead. This is what happens here.
If you really want to convert the object, you first need to unbox it. Say your original value was a float
before you boxed it in an object
:
double d = (double) (float) value;
Or use the method proposed by others, which uses Convert
. This has the advantage that the original type doesn’t have to be known.
Upvotes: 62
Reputation: 7801
The float has been boxed as an object. So you're trying to convert a boxed float into a double. Use Vyas's convert instead - it is far more flexible and should always do the right thing:
var val=Convert.ToDouble(value);
Upvotes: 5
Reputation: 1038850
That's normal. If the object type is float
you cannot cast it to double
because they are not of the same type:
object o = 1.0f;
double d = (double)o; // will throw an exception
You need to convert it:
double d = Convert.ToDouble(o);
Upvotes: 10