NullReferenceException

NullReferenceException

我正在阅读 this post ,其中回答者提到他更喜欢 ArgumentNullException 而不是 NullReferenceException

MSDN 提到 NullReferenceException :



ArgumentNullException they 上说:



回答者似乎说您可以使用任何一个。

有什么理由或任何情况我应该选择一个而不是另一个?

附言

我知道这个问题可能是基于意见的。 我想要事实、背景和情况。 我对个人喜好不感兴趣。

最佳答案

如果您在代码中明确抛出异常,则应选择 ArgumentNullException

当取消引用空引用/指针时,CLR 会自动抛出 NullReferenceException:

unsafe
{
    int* ptr = null; // Null pointer.
    int val = *ptr; // NullReferenceException thrown.
}

当在空引用上调用方法或属性时,最常发生这种情况:
string s = null;
string substring = s.Substring(0, 2); // NullReferenceException thrown.

在大多数情况下, NullReferenceException 不应在代码中显式抛出。
ArgumentNullException用于检查是否将空引用作为参数传递的情况,通常是为了防止NullReferenceException
static string FirstTwo(string s)
{
    if (s == null)
    {
        throw new ArgumentNullException("s");
    }
    return s.Substring(0, 2); // without the original check, this line would throw a NullReferenceException if s were null.
}

这个检查的目的是让调用者清楚地知道传入了null,不允许null。否则,如果你只是让 NullReferenceException 被抛出,调用者只会看到



这没有那么有意义(使用支票时):

关于c# - NullReferenceException 与 ArgumentNullException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39520241/

10-13 06:27