请考虑以下代码:
try{
....
} catch(Exception) {
return null;
throw;
}
它有意义吗?
通常,如果在返回后放置任何代码,Visual Studio会将其标记为无法访问的代码,但对于这种情况,它不会。这有什么理由吗?
修改
作为问题的补充,我想问另一个问题。
如果我在返回后在finally块中抛出异常会怎样?
try{
....
} catch(Exception) {
return null;
} finally {
throw new Exception();
}
答案 0 :(得分:4)
throw
之后的return
永远不会被执行。调用者的异常不是thrown
。它是无法访问的代码。
没有任何意义,抛出异常的方法不会向调用者返回任何内容(异常本身除外)。所以就扔吧。
try
{
// return something valid
}
catch(Exception)
{
throw;
}
至于为什么它没有被Visual Studio标记为无法访问,我认为这是一个错误。
如果在finally块中抛出异常,则异常会在堆栈中冒泡以查找catch并且不返回该值。
答案 1 :(得分:3)
在 DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowFormattingCells:=True,
AllowFormattingColumns:=True, _AllowFormattingRows:=True, AllowInsertingHyperlinks:=True,
AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
.EnableSelection = xlNoRestrictions
语句之后放置任何代码完全没有意义。它根本无法执行,无论是有效的声明还是类似的例外情况。使用return
,您可以执行堆栈并且不会返回,因此应用程序无法在单个return
语句之后检查代码。
您应 返回特定值或抛出异常,两者都不起作用。说完这个,return
和return
语句都将保留当前方法并返回到调用方法。
另外还有throw
。这有点不同,因为它意味着“从迭代器方法返回下一个元素”。
答案 2 :(得分:1)
return
和throw
都会退出该方法。您的catch
块永远不会抛出异常,因为您只能退出一次。因此,此处无法访问throw
。但是如果存在finally
块,情况可能会有所不同。请考虑以下代码。
try{
....
}
catch(Exception) {
return null;
throw; // unreachable
}
finally
{
//....
}
即使有任何异常,finally
块内的代码也会执行,return null
返回值将保持缓存状态,直到最终执行。
修改强>
如果finally块抛出异常,它会向上传播,应该是 处理更高层次。如果没有处理异常,那么 程序会崩溃
有关详情,请点击此link