要抛出的异常而不是NullReferenceException

本文关键字:NullReferenceException 异常 | 更新日期: 2023-09-27 18:18:27

c#代码

void method(int a)
{
    int b = get(a);
    if ( b == 0 )
    {
        throw new NullReferenceException();
    }
}

如果我抛出NullReferenceException,它将生成一个警告,这不是一个好方法。

所以如果有任何异常而不是NullReferenceException ?我发现了ArgumentNullException,但它不是很适合这个代码,因为b不是一个参数。

要抛出的异常而不是NullReferenceException

正如@AlexeiLevenkov在他的评论中所说,选择异常类型取决于个人选择。然而,这里有一些你应该遵守的准则。例如,不从代码中抛出NullReferenceException

MSDN给出了一些非常合理的指导,正如你所期望的。

关于你的实际问题,我会,如果一个自定义的例外是不合适的,可能使用InvalidOperationException。YMMV .

在这种情况下,如果函数get(a)是确定性的,我建议抛出ArgumentException并说明a的允许范围。

。throw new ArgumentException("参数a必须是....","a");

如果函数get(a)是不确定的(我们不能说什么是可接受的范围),那么ApplicationException与消息说一些关于原因(即。