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

c#, casting, double, int

Solution

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>`.

Problem

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?

Original source