It seems to me that a lot of my debugging time is spent chasing down null-reference exceptions in complex statements. For instance:
For Each game As IHomeGame in _GamesToOpen.GetIterator()
Why, when I get a NullReferenceException, can I get the line number in the stack trace, but not the name of the object that equals null. In other words, why:
Object reference not set to an instance of an object.
instead of
_GamesToOpen is not set to an instance of an object.
or
Anonymous object returned by _GamesToOpen.GetIterator() is null.
or
game was set to null.
Is this strictly a design choice, meant to protect the anonymity of the code or is there a compelling reason in compiler design not to include this information in the debug-time exception?
Exceptions are runtime things, variables are compile time things.
In fact, the variable in your example is an expression. Expressions are not always simple variables. At runtime, the expression will be evaluated and the method will be called on the resulting object. If the value of that expression is null
, the runtime will throw a NullReferenceException
. Assume the following:
Dim a as New MyObject
Dim b as String = MyObject.GetNullValue().ToString()
What error message should the runtime return if the GetNullValue()
method returns null
?