Я видел, что некоторые разработчики используют оператор возврата в блоке выгоды. Почему/когда это было бы полезной техникой для использования?
Править: Я на самом деле просто видел, что ключевое слово возврата использовалось.
Спасибо
public void Function () {
try
{
//some code here
}
catch
{
return;
}
}
при возврате; при ударе поток выполнения выскакивает из функции. Это можно сделать только в методах void.
РЕДАКТИРОВАТЬ: вы делаете это, если не хотите выполнять остальную часть функции. Например, если вы выполняете ввод-вывод файла и возникает ошибка чтения, вы не хотите выполнять код, обрабатывающий данные в этом файле, поскольку у вас его нет.
Бывают случаи, когда вы не заботитесь о сгенерированном исключении, а только о том, что операция Try завершилась неудачно. Примером могут служить функции TryParse, которые в псевдокоде выглядят так:
try
{
//attempt conversion
return true;
}
catch
{
return false;
}
Это было бы полезно, если вы знаете, какое возвращаемое значение функции должно быть в блоке catch.
Пример:
public bool IsDatabaseAvailable() {
try {
// connect
return true;
}
catch (Exception) {
return false;
}
finally {
// clean up
}
}
Возможно, вы захотите перехватить ошибку, зарегистрировать ее и, скажем, вернуть значение false, которое указывает, была ли функция успешной. В других ситуациях вы можете захотеть вернуть некоторые данные, которые были вычислены в блоке try
Некоторые методы внутри .Net Framework выдают исключение, если формат не подходит.
Хорошим примером является int.TryParse (object value)
, если ваше значение равно «10s», это вызовет исключение. В этом случае мы знаем, что это из-за недопустимого преобразования.
Итак
try
{
int.TryParse(value);
return true;
}
catch { return false; }
Это может быть функция, которая сообщает нам, является ли строка допустимым целым числом.
Если вы действительно используете эту форму для этого вопроса, пожалуйста, не делайте catch (Exception ex), так как это заставит .Net сериализовать ошибку внутри объекта, что довольно медленно.
Также важно помнить, что даже если вы используете return внутри блока try catch, он все равно выполнит блок finally.
Так что, если ваш очищающий код находится внутри finally, не беспокойтесь, фреймворк обязательно вызовет его.
Мои 2 цента. N.
Любая ситуация, в которой у вас есть альтернатива, если попытка не удалась.
Примером может быть проверка, доступен ли файл
для какой-то операции
bool IsComplete = false;
try
{
// FileStream currentWriteableFile =
File.OpenWrite(sFileLocation);
}
catch(Exception)
{
return false;
}