1

c#的代码

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

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

那么如果有任何异常而不是 NullReferenceException 呢?我找到了 ArgumentNullException,但它对这段代码不太合适,因为 b 不是参数。

4

2 回答 2

2

正如@AlexeiLevenkov 在他的评论中所说,选择异常类型取决于个人选择。但是,您应该遵守一些准则。例如,就像您看到的那样,不要NullReferenceException从代码中抛出。

正如您所料, MSDN提供了一些非常合理的指南。

关于您的实际问题,如果自定义异常不合适,我可能会使用InvalidOperationException. YMMV。

于 2016-11-18T05:35:19.710 回答
1

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

即 throw new ArgumentException("Parmeter a must be ....", "a");

如果函数 get(a) 是不确定的(我们不能说什么是可接受的范围),那么 ApplicationException 会显示一些关于原因的消息(即“无法执行操作,因为此时服务器很忙”)。

于 2016-11-18T07:43:23.573 回答