Что бы вы считали лучшим типом исключения, который должен быть брошен, когда метод расширения вызывается в экземпляре null (где метод расширения не позволяет его)? Поскольку методы расширения - это не что иное, как статические методы, вы можете утверждать, что это должно быть ArgumentNullException, но, с другой стороны, они используются как методы экземпляров, поэтому было бы более естественным использовать исключение NullReferenceException. Возьмем следующий пример:
public static string ToInvariantString(this IFormattable value, string format)
{
return value.ToString(format, CultureInfo.InvariantCulture);
}
Таким образом вызывается исключение NullReferenceException, если параметр значения имеет значение null.
Другой пример:
public static string ToInvariantString(this IFormattable value, string format)
{
if (value == null) throw new ArgumentNullException("value");
return value.ToString(format, CultureInfo.InvariantCulture);
}
EDIT: В некоторых ответах вы указали, что методы расширения можно вызывать как статический метод, и в этих случаях исключение с нулевой ссылкой было бы неправильным, что является отличным моментом и фактически одной из моих проблем, не уверен, почему я забыл упомянуть об этом в вопросе, в первую очередь.
Кто-то также указал, что неправильно выбрасывать исключение NullReferenceException, и да, это так. Поэтому я не бросаю это, я просто позволяю этому (пусть CLR его бросает), не защищая метод.
Я думаю, что я одобряю ArgumentNullException (это то, что я использовал до сих пор), но я все еще думаю, что по крайней мере есть место для аргументации против исключения NullReferenceException, поскольку оно кажется более естественным в большинстве мест, где этот метод будет б.