2016-07-19 2 views
3

Resharper считает, что последнее предложение catch является излишним. Зачем?Почему 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; 
} 
+3

Вы просто ловите и перебрасываете ex. Вам не нужно это предложение catch {}, оно будет иметь такой же эффект без него. – Mangist

ответ

6

Потому что это поведение по умолчанию - не пойманные исключения будут идти дальше, без необходимости их реконструировать.

C# reference:

Когда исключение, общий язык среды выполнения (CLR) ищет заявление улова, который обрабатывает это исключение. Если текущий исполняемый метод не содержит такого блока catch, CLR смотрит на метод, который вызывает текущий метод, и так далее на стек вызовов.

В вашем конкретном случае, если вы не будете повторно выдать исключения, другие тогда WebException CLR будет продолжать раскручивать стек ищет следующую примерку улов.

Если вы перевернете это исключение, clr продолжит раскручивать стек, ищущий следующий try-catch.

Итак, никакой разницы.

+1

Да, это все равно будет бросать лишний улов, если вы просто выбросите его: P – starlight54

5

Возможно потому, что ваш улов блок не делает ничего, кроме Повторного выбрасывания же исключения:

catch (Exception ex) // Resharper thinks this clause is redundant 
{ 
    throw; 
} 

Вы могли бы доказательство его, добавив код в этом блоке улова.

Смежные вопросы