为什么有人要这样做呢?我不明白。如果我删除这个try-catch块,是否会影响代码?
try
{
Collection<SvnLogEventArgs> svnLog = GetSVNRevisionsLog(lastRevision, currentRevision, svnUrl);
svnInfo = PopulateOutput(svnLog, svnUrl.ToString());
}
catch (Exception e)
{
throw e;
}
为什么有人要这样做呢?我不明白。如果我删除这个try-catch块,是否会影响代码?
try
{
Collection<SvnLogEventArgs> svnLog = GetSVNRevisionsLog(lastRevision, currentRevision, svnUrl);
svnInfo = PopulateOutput(svnLog, svnUrl.ToString());
}
catch (Exception e)
{
throw e;
}
为什么有人要这样做?
你不应该这样做。最接近的情况是如果你想要添加一些日志记录,那么你应该这样写:
try
{
/// Do something
}
catch (Exception e)
{
LogException(e); // Do some logging
throw; // Don't use throw e
}
throw
语句单独使用时,可以保留异常的调用堆栈信息。可能有这样的情况,开发人员不想向用户公开实际调用堆栈,因为throw e
会重置堆栈跟踪(所以您的错误似乎源自应用 try 块的方法)
然而,简单地抛出仍会保留堆栈跟踪。因此,除非您在 throw 之上有其他代码,否则这没有任何意义:
try
{
Collection<SvnLogEventArgs> svnLog =
GetSVNRevisionsLog(lastRevision, currentRevision, svnUrl);
svnInfo = PopulateOutput(svnLog, svnUrl.ToString());
}
catch (Exception e)
{
throw;
}
那个try/catch块没有意义。只有在计划对其进行操作时才需要捕获异常,但在这种情况下什么也没做(仅抛出异常并不算做做了什么,因为这总是会发生的)。你可以安全地将其删除。
是的,你应该移除 try catch。你应该捕获特定类型的异常,而且如果你尝试捕获然后抛出异常,原始异常的调用堆栈信息就会丢失,而调用堆栈信息对于调试非常重要。
所以,一般来说,不要 try catch 所有东西。