Jon's answer is correct but I would add some additional notes.

Why does Console.WriteLine(null) give a compilation error?

There are 19 overloads of Console.WriteLine and three of them are applicable to a null : the one that takes a string , the one that takes a char[] and the one that takes an object . C# cannot determine which of these three you mean, so it gives an error. Console.WriteLine((object)null) would be legal because now it is clear.

why does Console.WriteLine(a) write an empty line?

a is a null int? . Overload resolution chooses the object version of the method, so the int? is boxed to a null reference. So this is basically the same as Console.WriteLine((object)null) , which writes an empty line.

Why there is not NullReferenceException on the increment?