Diciamo che ho un metodo:
public void DoSomething(ISomeInterface someObject)
{
if(someObject == null) throw new ArgumentNullException("someObject");
someObject.DoThisOrThat();
}
Sono stato addestrato a credere che il lancio di ArgumentNullException
sia "corretto" ma un errore "Riferimento oggetto non impostato su un'istanza di un oggetto" significa che ho un bug.
Perché?
So che se memorizzo nella cache il riferimento a someObject
e lo utilizzi in un secondo momento, allora è meglio controllare la nullità quando viene passato e fallire presto. Tuttavia, se sto effettuando il dereferimento sulla riga successiva, perché dovremmo fare il controllo? Porrà un'eccezione in un modo o nell'altro.
Modifica :
Mi è appena venuto in mente ... la paura del nulla dereferenziato proviene da un linguaggio come il C ++ che non controlla per te (cioè cerca solo di eseguire qualche metodo su posizione di memoria zero + offset del metodo)?