Resharper认为最后一个catch
子句是多余的。为什么呢?
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUrl);
try
{
var response = (HttpWebResponse) request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var jsonResult = streamReader.ReadToEnd();
}
}
catch (WebException e)
{
Exception newEx;
if (e.Response != null)
{
using (var sr = new StreamReader(e.Response.GetResponseStream()))
{
newEx = new Exception(sr.ReadToEnd(), e);
}
}
else
{
newEx = new Exception(e.Message, e);
}
throw newEx;
}
catch (Exception ex) // Resharper thinks this clause is redundant
{
throw;
}
答案 0 :(得分:8)
因为它是一种默认行为 - 未被捕获的异常将进一步发展,而无需重新抛出它们。
抛出异常时,公共语言运行库(CLR)会查找处理此异常的catch语句。如果当前正在执行的方法不包含这样的catch块,则CLR会查看调用当前方法的方法,依此类推调用堆栈。
在您的特定情况下,如果您不会重新抛出异常,那么WebException
clr将继续展开堆栈以寻找下一个try-catch。
如果你重新抛出异常,clr将继续展开堆栈,寻找下一个try-catch。
所以,没有区别。
答案 1 :(得分:6)
可能是因为除了重新抛出相同的异常之外,你的阻止块没有做任何事情:
catch (Exception ex) // Resharper thinks this clause is redundant
{
throw;
}
你可以通过在catch块中添加一些代码来证明它。