С# - Try-Catch-finally on Return
У меня есть следующий код:
public DataTable GetAllActiveUsers()
{
DataTable dataTable = new DataTable();
try
{
connection.Open();
SqlCommand getAllActiveUsersCommand = new SqlCommand(getAllUsers, connection);
SqlDataAdapter dataAdapter = new SqlDataAdapter(getAllActiveUsersCommand);
dataAdapter.Fill(dataTable);
return dataTable;
}
catch(Exception e)
{
Console.WriteLine(e);
return null;
}
finally
{
connection.Close();
}
}
В основном я получаю активных пользователей в моей базе данных. Но может кто-нибудь объяснить мне, будет ли выполняться блок Finally
, если он успешно запускает блок try
и возвращает DataTable??
Спасибо
Ответы
Ответ 1
Да.
Как указано здесь: MSDN
Как правило, операторы блока finally выполняются, когда элемент управления покидает попробуй выписать Передача контроля может произойти в результате нормального выполнение, выполнение перерыва, продолжения, перехода или возврата оператор или распространение исключения из оператора try.
Но, наконец, блок не всегда выполняется. Вы можете прочитать анекдот Алекса Пападимулиса здесь
Ответ 2
Да, это так.
Блок finally будет выполнен независимо от того, есть ли оператор return или исключение, выброшенное в блоке try {} catch()
.
Ответ 3
блок finally всегда выполняется.
вы должны удалить в блоке finally. Поскольку, dispose также закрывает соединение и предоставляет неуправляемые ресурсы памяти.
finally
{
connection.Dispose();
}