Disons que j'ai une méthode:
public void DoSomething(ISomeInterface someObject)
{
if(someObject == null) throw new ArgumentNullException("someObject");
someObject.DoThisOrThat();
}
J'ai été formé pour croire que lancer le ArgumentNullException
est "correct" mais une erreur "Référence d'objet non définie sur une instance d'un objet" signifie que j'ai un bug.
Pourquoi?
Je sais que si je mettais en cache la référence someObject
et que je l' utilisais plus tard, il est préférable de vérifier la nullité lorsqu'elle est transmise et d'échouer tôt. Cependant, si je fais un déréférencement sur la ligne suivante, pourquoi sommes-nous censés faire le contrôle? Cela va lever une exception dans un sens ou dans l'autre.
Modifier :
Cela m'est venu à l'esprit ... la peur du null déréférencé vient-elle d'un langage comme C ++ qui ne vérifie pas pour vous (c'est-à-dire qu'il essaie simplement d'exécuter une méthode à l'emplacement de mémoire zéro + décalage de méthode)?