Почему это “наконец” выполняется?

В настоящее время, нет. Ну, на самом деле можно нажать поврежденный узел проекта, и в свойствах область ищут свойство 'Path', тогда нажимают маленький значок обзора и выбирают новый путь.

Вуаля:)

17
задан Grace Note 12 May 2010 в 20:18
поделиться

8 ответов

Почему вы ожидаете, что он не будет выполняться?

Если у вас есть блок try / catch / finally или try / finally, блок finally выполняется независимо от того, какой код у вас может быть в блоке try или catch большую часть времени .

Вместо goto рассмотрите return.

//imagine this try/catch/finally block is inside a function with return type of bool. 
try
{
    throw new Exception();
}
catch (Exception)
{
    return false; //Let's say you put a return here, finally block still executes.
}
finally
{
    Console.WriteLine("I am in finally!");
}
28
ответ дан 30 November 2019 в 10:01
поделиться

Появляется следующий текст из Спецификации языка C # ( 8.9.3 Оператор goto )


Оператор goto выполняется следующим образом:

  • Если оператор goto выходит из одного или нескольких блоков try с связанных блоков finally, управление изначально передается блоку finally самого внутреннего оператора try. Когда и если управление достигает конечной точки блока finally, управление передается блоку finally следующего включающего оператора try. Этот процесс повторяется до тех пор, пока не будут выполнены блоки finally всех промежуточных операторов try.
  • Управление передается цели оператора goto.
36
ответ дан 30 November 2019 в 10:01
поделиться

Суть представленных ответов - что когда элемент управления покидает защищенную область любым способом, будь то «return», «goto», «break», «continue» или «throw», "finally" выполняется - правильно. Однако отмечу, что почти в каждом ответе говорится что-то вроде «блок finally всегда выполняется». Блок finally НЕ всегда выполняется. Есть много ситуаций, в которых блок finally не запускается.

Кто хочет попытаться перечислить их все?

13
ответ дан 30 November 2019 в 10:01
поделиться

Кажется разумным. Блок finally всегда запускается либо после try , либо после catch .

Аналогичным образом

try
{
  // do something
  return;
}
finally
{
  // do something else
}

всегда будет запускать finally блок. ИЗМЕНИТЬ - но см. Комментарии Эрика выше.

3
ответ дан 30 November 2019 в 10:01
поделиться

Это задумано. В обработчике исключений вы можете выполнить некоторые действия, связанные с исключением. В блоке finally вы должны выполнить очистку ресурсов - поэтому блок finally всегда выполняется независимо от кода обработки исключений.

2
ответ дан 30 November 2019 в 10:01
поделиться

Как уже упоминалось, , наконец, выполняется независимо от выполнения программы. Конечно, блок finally необязателен, поэтому, если он вам не нужен, не используйте его.

1
ответ дан 30 November 2019 в 10:01
поделиться

Поскольку ожидается, что оператор finally будет выполняться после выхода из try (или catch при обнаружении исключения). В том числе и при вызове goto.

0
ответ дан 30 November 2019 в 10:01
поделиться

В этом и заключается смысл блока finally. Он всегда выполняется (практически всегда).

0
ответ дан 30 November 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: