Мне нужно возвращение после исключения исключения (С++ и С#)
У меня есть функция, которая генерирует исключение. Например, следующий код:
void test()
{
ifstream test("c:/afile.txt");
if(!test)
{
throw exception("can not open file");
}
// other section of code that reads from file.
}
Нужно ли мне возвращать после выброса исключения?
Что в С#?
Ответы
Ответ 1
throw
обычно приводит к немедленному завершению функции, поэтому даже если вы поместите код после него (внутри одного и того же блока), он не будет выполняться. Это касается как С++, так и С#. Однако, если вы выкинете исключение внутри блока try
, и исключение попадет, выполнение будет продолжено в соответствующем блоке catch
, и если есть блок finally
(только С#), он будет выполнен, исключение выбрано или нет. Во всяком случае, любой код сразу после throw
никогда не будет выполнен.
Ответ 2
Строго говоря, бросание НЕ обязательно будет немедленно прекращать функцию... как в этом случае
try {
throw new ApplicationException();
} catch (ApplicationException ex) {
// if not re-thrown, function will continue as normal after the try/catch block
} catch (Exception ex) {
}
а затем есть блок finally, но после этого он выйдет.
Итак, нет, вам не нужно возвращаться.
Ответ 3
Нет, вам не нужно возвращать, потому что после исключения вызывается код после этого не будет выполнен.
Ответ 4
После вызова throw
метод немедленно вернется и код, следующий за ним, не будет выполнен. Это также верно, если любые исключения выбрасываются и не попадают в блок try / catch
.
Ответ 5
Если это метод void, вам никогда не понадобится команда возврата.
Тогда вы не можете поместить ничего после команды throw, он никогда не будет использоваться, если что-то брошено
void test()
{
ifstream test("c:/afile.txt");
if(!test)
{
throw exception("can not open file");
// If there is code here it will never be reach !
}
// other section of code that reads from file.
//if you place code here it will be reach only if you don"t throw an exception, so only if test == true in your case
}
Ответ 6
или вы можете использовать это по-другому.
void test()
{
ifstream test("c:/afile.txt");
if(!test)
{
MessageBox.Show("Can't Open the File");
retrun;
}
// other section of code that reads from file.
}