为什么有人会这样做?我不明白。我可以在不影响代码的情况下删除此try-catch块吗?
try
{
Collection<SvnLogEventArgs> svnLog = GetSVNRevisionsLog(lastRevision, currentRevision, svnUrl);
svnInfo = PopulateOutput(svnLog, svnUrl.ToString());
}
catch (Exception e)
{
throw e;
}
答案 0 :(得分:8)
为什么有人会这样做?
你不应该这样做。你应该来的最接近的是你想添加一些日志记录,在这种情况下你应该写:
try
{
/// Do something
}
catch (Exception e)
{
LogException(e); // Do some logging
throw; // Don't use throw e
}
throw
语句单独使用时,会保留异常调用堆栈信息。
话虽如此,如果您没有其他逻辑(例如日志记录),则绝对没有理由捕获异常。只有在您需要记录/处理异常时,或者如果您能够合理地处理错误并正确恢复时,才会捕获异常。
答案 1 :(得分:2)
可能是开发人员不希望向用户公开实际调用堆栈的情况,因为throw e
重置堆栈跟踪(因此您的错误会出现来源于应用try块的方法)
但是,只是抛出保留堆栈跟踪。所以,除非你有以上其他代码抛出,否则这没有任何意义:
try
{
Collection<SvnLogEventArgs> svnLog =
GetSVNRevisionsLog(lastRevision, currentRevision, svnUrl);
svnInfo = PopulateOutput(svnLog, svnUrl.ToString());
}
catch (Exception e)
{
throw;
}
答案 2 :(得分:0)
那个try / catch块毫无意义。你只需要捕获异常,如果你打算用它做一些事情,但在这种情况下什么都没做(只是抛出异常并不算是做某事,因为无论如何都这样做)。你可以安全地删除它。
答案 3 :(得分:0)
是的,您应该删除try catch。您应该捕获特定类型的异常,如果您尝试捕获,然后抛出,原始异常的调用堆栈信息将丢失,并且调用堆栈信息对于调试非常重要。
所以,一般来说,不要试着抓住每件事。