try
{...
block:
....
}
catch{ ..}
GOTO block
...
....
finally{...}
Будет ли в этом случае выполнено goto?Оператор GOTO в C# .NET
try
{...
block:
....
}
catch{ ..}
GOTO block
...
....
finally{...}
Будет ли в этом случае выполнено goto?Оператор GOTO в C# .NET
Это не будет компилироваться из-за «GOTO block
» вместо «goto block;
», и даже если он был прав, он не будет компилироваться, так как спецификации C# состояния (§8.9.3):
Цель a
goto
идентификатор statement - это обозначение с указанной меткой. Если метка с заданным именем не существует в текущем члене функции или если оператор goto не входит в область метки, возникает ошибка времени компиляции. Это правило позволяет использовать оператор goto для переноса управления из вложенной области, но не в вложенную область.
Кроме того, я тоже нашел пару Спекуляции мне интересно:
Оператор Goto не может выйти из
finally
блока (§8.10). Когда оператор goto встречается в блокеfinally
, цель оператора goto должна находиться в одном блокеfinally
, иначе возникает ошибка времени компиляции.
И:
Гото оператор выполняется следующим образом:
- Если оператор Гото выходит один или несколько TRY блоков с ассоциированными наконец блоки,> управление сначала переносится на наконец, блок самого внутреннего утверждения try. Когда> и если управление достигает конечной точки блока finally, управление передается блоку> finally следующего закрывающего оператора try. Этот процесс повторяется до тех пор, пока не будут завершены блоки finally всех промежуточных инструкций try.
- Управление передается цели оператора goto.
последнее означает, что если у вас есть
try
{
...
goto Label1;
}
finally
{
CloseAll();
}
Label1:
MethodB();
он будет вызывать CloseAll()
перед тем как передача управления на Label1
и выполнение MethodB()
.
Отличный смысл, но я никогда не думал об этом ...
№ блок: ярлык должен быть вне попытки, чтобы перейти, чтобы увидеть его. Код даже не компилируется. Вы принимаете тест :)?
Ни один человек, на самом деле мой frnd не задал мне такой вопрос, поэтому я был в замешательстве, поэтому я подумал задать вопрос здесь, на Stackoverflow – Kiran
. Я обнаружил, что чтение Спецификация языка C# довольно полезна в таких случаях :) – Regent
И, конечно, на самом деле попытка кода в Visual Studio даст вам много информации. –
Зачем вам это нужно? – Pondidum
'C# .NET', nice ... –
Не ошибка компиляции? – ironic