Вернуть операторы в блоки catch - PullRequest
5 голосов
/ 03 марта 2010

Я видел, как некоторые разработчики использовали оператор return в блоке catch.Почему / когда это полезный метод для применения?

РЕДАКТИРОВАТЬ: я на самом деле только что видел ключевое слово return.

Ответы [ 6 ]

7 голосов
/ 03 марта 2010

Бывают случаи, когда вы не заботитесь о сгенерированном исключении, а только при попытке выполнить попытку. Примером могут служить функции TryParse, которые в псевдо-коде выглядят так:

try
{
   //attempt conversion
   return true;
}
catch
{
   return false;
}
1 голос
/ 03 марта 2010

функция public void () {

try 
{ 
    //some code here
}
catch
{ 
    return;
}

}

при возврате; ударил, поток выполнения выпрыгивает из функции. Это может быть сделано только для пустых методов.

РЕДАКТИРОВАТЬ: вы делаете это, если вы не хотите выполнять остальные функции. Например, если вы выполняете ввод-вывод файла и возникает ошибка чтения, вы не хотите выполнять код, который обрабатывает данные в этом файле, поскольку у вас его нет.

1 голос
/ 03 марта 2010

Некоторые методы в .Net Framework выдают исключение, когда он не имеет хорошего формата.

Хорошим примером является int.TryParse(object value)

если ваше значение равно 10 с, оно выдаст исключение. В этом случае мы знаем, что это из-за неверного преобразования.

Итак

try 
{ 
    int.TryParse(value);
    return true; 
}
catch { return false; }

Может быть функцией, которая сообщает нам, является ли строка допустимым целым числом.

Если вы используете эту форму для этого вопроса, пожалуйста, не делайте catch (Exception ex), так как это заставляет .Net сериализовать ошибку внутри объекта, которая довольно медленная.

Также важно помнить, что даже если вы используете return внутри блока try catch, он все равно будет выполнять блок finally.

Так что, если ваш код очистки находится внутри, не волнуйтесь, фреймворк обязательно вызовет его.

Мои 2 цента. N.

1 голос
/ 03 марта 2010

Возможно, вы захотите отловить ошибку, зарегистрировать ее и сказать, что возвращает значение false, которое указывает, была ли функция успешной. В других ситуациях вы можете захотеть вернуть некоторые данные, которые были рассчитаны в блоке try

1 голос
/ 03 марта 2010

Это было бы полезно, если вы знаете, какое возвращаемое значение функции должно быть в блоке catch.

Пример:

public bool IsDatabaseAvailable() {
    try {
        // connect
        return true;
    }
    catch (Exception) {
        return false;
    }
    finally {
        // clean up
    }
}
0 голосов
/ 03 марта 2010

Любая ситуация, когда у вас есть альтернатива, если попытка не удалась. Примером может быть проверка, доступна ли file для некоторых operation

    bool IsComplete = false;

    try
    {
      //  FileStream currentWriteableFile = 
                     File.OpenWrite(sFileLocation);          
    }
    catch(Exception)
    {
      return false;
    }
...