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?