考虑以下代码:
try{
....
} catch(Exception) {
return null;
throw;
}
这有什么意义吗?
通常,如果您在 return 之后放置任何代码,Visual Studio 会将其标记为无法访问的代码,但对于这种情况,它不会。这是有原因的吗?
编辑
作为问题的补充,我想再问一个。
如果我在 return 后的 finally block 中抛出异常会怎样?
try{
....
} catch(Exception) {
return null;
} finally {
throw new Exception();
}
最佳答案
return
之后的throw
永远不会执行。异常不会抛出
给调用者。这是一个无法访问的代码。
这没有任何意义,抛出异常的方法不会向调用者返回任何内容(异常本身除外)。所以就扔吧。
try
{
// return something valid
}
catch(Exception)
{
throw;
}
至于为什么没有被Visual Studio标记为unreachable,我认为是bug。
编辑:
如果在 finally block 中抛出异常,异常会在堆栈中向上冒泡以查找捕获并且不会返回值。
关于C# - 返回后在 catch block 中重新抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38788725/