Quel serait, selon vous, le meilleur type d'exception à lever lorsqu'une méthode d'extension est appelée sur une instance nulle (lorsque la méthode d'extension ne le permet pas) ? Étant donné que les méthodes d'extension ne sont rien d'autre que des méthodes statiques, on pourrait dire que ce devrait être ArgumentNullException, mais d'un autre côté, elles sont utilisées comme des méthodes d'instance et il serait donc plus naturel d'utiliser NullReferenceException. Prenons l'exemple suivant :
public static string ToInvariantString(this IFormattable value, string format)
{
return value.ToString(format, CultureInfo.InvariantCulture);
}
De cette façon, une NullReferenceException sera levée si le paramètre de valeur est nul.
L'autre exemple serait :
public static string ToInvariantString(this IFormattable value, string format)
{
if (value == null) throw new ArgumentNullException("value");
return value.ToString(format, CultureInfo.InvariantCulture);
}
EDIT : Dans certaines réponses, vous avez souligné qu'une méthode d'extension peut être appelée comme une méthode statique et que, dans ce cas, une exception de référence nulle serait erronée, ce qui est un excellent point, et en fait l'une de mes préoccupations, je ne sais pas pourquoi j'ai oublié de le mentionner dans la question en premier lieu.
Quelqu'un a également fait remarquer que c'était une erreur de lancer une NullReferenceException, et c'est vrai. C'est pourquoi je ne la lève pas, je la laisse simplement se produire (laisser le CLR la lever) en ne gardant pas la méthode.
Je pense que je préfère l'exception ArgumentNullException (c'est ce que j'ai utilisé jusqu'à présent) mais je pense toujours qu'il y a au moins une place pour argumenter pour ou contre l'exception NullReferenceException puisqu'elle semble plus naturelle dans la plupart des endroits où la méthode va être utilisée.