Ken*_*130 3 c# exception-handling
在以下示例中,我们有两个不同的异常要通信.
//constructor
public Main(string arg){
if(arg==null)
throw new ArgumentNullException("arg");
Thing foo=GetFoo(arg);
if(foo==null)
throw new NullReferenceException("foo is null");
}
Run Code Online (Sandbox Code Playgroud)
这是两种异常类型的正确方法吗?
第一个例外肯定是正确的.这是第二个棘手的问题.
这里有两种可能性:
GetFoo()并不意味着返回null.在那种情况下,我们基本上证明了一个错误GetFoo().我不确定这里最好的例外,将ContractException(从代码合同中)留在一边.基本上你想要的东西就像ContractException-个例外,这意味着"世界已经疯了:这不只是外部意想不到的结果,有一个错误在这里."GetFoo()null由于arg价值,可以合法地返回.在这种情况下,我建议ArgumentException(但不是 ArgumentNullException)可能是合适的.另一方面,使用参数ArgumentException 后抛出是奇怪的.InvalidOperationException在这里不太合适,但我可能会试图将它作为最接近合同失败的东西......
编辑:根据Aaronaught的回答,您还应该考虑创建自己的例外.
你永远不应该明确抛出一个NullReferenceException.
如果null作为参数传递,则应该ArgumentNullException使用参数的名称抛出一个.
如果是其他的事情null,你应该抛出InvalidOperationException描述性的消息.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |