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 ArgumentNullException
dell'errore sia "corretto" ma un errore "Riferimento oggetto non impostato su un'istanza di un oggetto" significa che ho un bug.
Perché?
So che se stavo memorizzando nella cache il riferimento someObject
e lo stavo usando in seguito, è meglio verificare la nullità quando viene passato e fallire presto. Tuttavia, se lo sto riferendo alla riga successiva, perché dovremmo fare il controllo? Genererà un'eccezione in un modo o nell'altro.
Modifica :
Mi è appena venuto in mente ... la paura del null dereferenziato proviene da un linguaggio come il C ++ che non controlla per te (cioè cerca solo di eseguire qualche metodo nella posizione di memoria zero + offset del metodo)?