Что вы считаете лучшим типом исключения для выброса, когда метод расширения вызывается для нулевого экземпляра (где метод расширения не позволяет это)? Поскольку методы расширения представляют собой не что иное, как статические методы, вы можете утверждать, что это должно быть ArgumentNullException, но, с другой стороны, они используются как методы экземпляра, поэтому может быть более естественным использовать исключение NullReferenceException. Давайте возьмем следующий пример:
public static string ToInvariantString(this IFormattable value, string format)
{
return value.ToString(format, CultureInfo.InvariantCulture);
}
Таким образом, будет выброшено исключение NullReferenceException, если значение параметра равно нулю.
Другой пример будет:
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, так как это кажется более естественным в большинстве мест, где метод будет б.