在空实例上调用扩展方法时(扩展方法不允许它),您认为什么是抛出的最佳异常类型?由于扩展方法只不过是静态方法,因此您可以辩称它应该为ArgumentNullException,但另一方面,它们的使用类似于实例方法,因此使用NullReferenceException可能更自然。让我们来看下面的例子:
public static string ToInvariantString(this IFormattable value, string format)
{
return value.ToString(format, CultureInfo.InvariantCulture);
}
如果value参数为null,则将引发NullReferenceException。
另一个示例是:
public static string ToInvariantString(this IFormattable value, string format)
{
if (value == null) throw new ArgumentNullException("value");
return value.ToString(format, CultureInfo.InvariantCulture);
}
编辑: 在一些答案中,您指出可以像静态方法一样调用扩展方法,在这种情况下,空引用异常将是错误的,这很重要,实际上是我关心的问题之一,不确定为什么我首先忘记了这个问题。
有人还指出,抛出NullReferenceException是错误的,是的。这就是为什么我不抛出它,而是通过不保护该方法而让它发生(让CLR抛出它)。
我认为我赞成ArgumentNullException(到目前为止,这是我一直使用的),但我仍然认为至少存在争辩反对NullReferenceException的空间,因为在大多数将使用该方法的地方,它似乎更自然。
Cats萌萌
拉风的咖菲猫
ABOUTYOU
慕婉清6462132