C# - 返回后在 catch block 中重新抛出异常

标签 c# exception return try-catch

考虑以下代码:

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/

相关文章:

c# - C# 和 VB 如何处理命名参数之间的差异?

c# - 什么是.Net中的序列化

java - .net 中 AggregateException 的 java 等价物是什么?

c# - 如何解决这个僵局呢?

C# 无法设置对象

c# - Try..Catch block 总是很昂贵?

c++ - 未处理的异常 : 0x80000001: Not implemented. (VC++)

python - 将列表的元素作为 Python 中的单个项目返回

java - 我怎样才能只返回 String 方法的一部分?

javascript - 返回深层属性的值(如果存在)