As you probably know, the C# compiler does flow analysis on constants for the purposes of finding unreachable code. In this method the statement with the calls is known to be unreachable, and the compiler warns about it.
const object x = null; void Foo() { if (x != null) { Console.WriteLine(x.GetHashCode()); } }
Now suppose we removed the if
statement and just had the call:
const object x = null; void Foo() { Console.WriteLine(x.GetHashCode()); }
The compiler does not warn you that you’re dereferencing null! The question is, as usual, why not?
Continue reading