following code behaves strange (at least for me):
int testValue = 1234;
this.ConversionTest( testValue );
private void ConversionTest( object value )
{
long val_1 = (long) (int) value; // works
long val_2 = (long) value; // InvalidCastException
}
I don't understand why the direct (explicit) cast to long doesn't work.
Can someone explain this behaviour?
Thanks
The value
parameter of your ConversionTest
method is typed as object
; this means that any value types -- for example, int
-- passed to the method will be boxed.
Boxed values can only be unboxed to exactly the same type:
- When you do
(long)(int)value
you're first unboxing value
to an int
(its original type) and then converting that int
to a long
.
- When you do
(long)value
you're attempting to unbox the boxed int
to a long
, which is illegal.