Alex Rivera | Logout

C# int- or object-to-double casting error explanation

Asked 2012-04-30T16:34:37.993
12

The below code fails at the last assignment:

static void Main(string[] args)
{
    int a = 5;
    object b = 5;

    System.Diagnostics.Debug.Assert( a is int && b is int );

    double x = (double)a;
    double y = (double)b;
}

If both a and b are int, what is the cause of this error?

Edit
Report

1 Answer

26

This is an extremely frequently asked question. See https://ericlippert.com/2009/03/03/representation-and-identity/ for an explanation.


Snippet:

I get a fair number of questions about the C# cast operator. The most frequent question I get is:

short sss = 123;
object ooo = sss;            // Box the short.
int iii = (int) sss;         // Perfectly legal.
int jjj = (int) (short) ooo; // Perfectly legal
int kkk = (int) ooo;         // Invalid cast exception?! Why?

Why? Because a boxed T can only be unboxed to T. (*) Once it is unboxed, it’s just a value that can be cast as usual, so the double cast works just fine.

(*) Or Nullable<T>.

answered 2012-04-30T16:36:56.180

Your Answer