是否有必要从扩展方法中抛出NullReferenceException?

Mat*_*vey 5 c# extension-methods

如果我定义一个扩展方法,如下所示:

static public String ToTitleCase(this string instance, CultureInfo culture)
{
    if (instance == null)
        throw new NullReferenceException();

    if (culture == null)
        throw new ArgumentNullException("culture");

    return culture.TextInfo.ToTitleCase(instance);
}
Run Code Online (Sandbox Code Playgroud)

我是否有必要检查字符串实例是否为null并自己抛出空引用异常?或者CLR在这种情况下是否像实例方法一样处理扩展方法并为我处理检查/抛出?

我知道扩展方法只是静态方法的语法糖,也许C#编译器在编译时添加了检查?请澄清 :)

Luk*_*keH 28

号你应该永远不会抛出一个NullReferenceException手动.它应该只被框架本身抛出.

在这种情况下,你应该扔ArgumentNullException两个instanceculture:

static public String ToTitleCase(this string instance, CultureInfo culture)
{
    if (instance == null)
        throw new ArgumentNullException("instance");

    if (culture == null)
        throw new ArgumentNullException("culture");

   return culture.TextInfo.ToTitleCase(instance);
}
Run Code Online (Sandbox Code Playgroud)

NullReferenceException文档:

请注意,应用程序抛出 ArgumentNullException异常而不是NullReferenceException此处讨论的 异常.

  • 我不认为你的"从不"有足够的重点. (5认同)
  • 也许你应该提到这个文档:[Creating and Throwing Exceptions - C# 编程指南 | Microsoft 文档](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/exceptions/creating-and- throwing-exceptions#things-to-avoid-when- throwing-exceptions) (2认同)