0

代码如果我扔的NullReferenceException,它会生成一个警告,这不是一个好办法。抛出异常而不是NullReferenceException? C#的</p> <pre><code>void method(int a) { int b = get(a); if (b == 0) { throw new NullReferenceException(); } } </code></pre> <p>

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

+1

异常的选择大多是个人偏好 - 所以这可能不适合SO的问题。 –

+0

@AlexeiLevenkov如果我使用ArgumentNullException,那么参数必须是“a”,否则,它会产生另一个警告,但我想记录b是空的。 –

+0

你为什么要生成一个异常? 我会用'bool方法(int a)'和'return true'或'return false' 否则你可以看看这篇文章:https://msdn.microsoft.com/en-us/library/87cdya3t(v = vs.110).aspx – Essigwurst

回答

2

正如@AlexeiLevenkov在他的评论中所言,选择一种异常类型是为了个人选择。但是,您应遵守一些准则。就像你所看到的,例如,不要从代码中抛出NullReferenceException

MSDN给出了一些非常好的指导原则,正如你所期望的那样。

关于您的实际问题,如果自定义例外不适合,我可能会使用InvalidOperationException。因人而异。

1

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

I.e.抛出新的ArgumentException(“Parmeter a must be ....”,“a”);如果函数get(a)是非确定性的(我们不能说什么是可接受的范围),那么ApplicationException带有消息说明关于原因的一些信息(即“由于服务器此刻正忙,无法执行操作”)。

相关问题