try
{...
block:
....
}
catch{ ..}
GOTO block
...
....
finally{...}
Goto si esegue in questo caso ??Istruzione GOTO in C# .NET
try
{...
block:
....
}
catch{ ..}
GOTO block
...
....
finally{...}
Goto si esegue in questo caso ??Istruzione GOTO in C# .NET
Non verrà compilato a causa di 'GOTO block
' invece di 'goto block;
' e anche se era giusto non si compila causa C# Specifiche stati (§8.9.3):
L'obiettivo di a
goto
identifier statement è l'istruzione etichettata con l'etichetta data. Se un'etichetta con il nome specificato non esiste nel membro della funzione corrente o se l'istruzione goto non rientra nell'ambito dell'etichetta, si verifica un errore in fase di compilazione. Questa regola consente l'utilizzo di un'istruzione goto per trasferire il controllo da un ambito nidificato, ma non da a nell'ambito nidificato.
Inoltre ho trovato paio di specifiche interessante anche per me:
Una dichiarazione goto non può uscire da un blocco
finally
(§8.10). Quando si verifica un'istruzione goto all'interno di un bloccofinally
, la destinazione dell'istruzione goto deve trovarsi all'interno dello stesso bloccofinally
o in caso contrario si verifica un errore in fase di compilazione.
E:
Un'istruzione goto viene eseguita come segue:
- Se goto esce uno o più blocchi try con blocchi associati infine,> controllo viene inizialmente trasferito al infine blocco della dichiarazione di prova più interna. Quando> e se il controllo raggiunge il punto finale di un blocco finale, il controllo viene trasferito al blocco> finally della successiva istruzione try allegata. Questo processo viene ripetuto finché non sono stati eseguiti i> blocchi finali di tutte le dichiarazioni di prova intervenienti.
- Il controllo viene trasferito alla destinazione dell'istruzione goto.
quest'ultimo significa che se si dispone di
try
{
...
goto Label1;
}
finally
{
CloseAll();
}
Label1:
MethodB();
chiamerà CloseAll()
prima realmente di trasferire il controllo al Label1
e l'esecuzione MethodB()
.
Ha perfettamente senso, ma non ci ho mai pensato ...
N. blocco: l'etichetta deve essere al di fuori del tentativo per consentire al goto di vederlo. Il codice non verrà nemmeno compilato. Stai facendo un test :)?
Nessun uomo, attualmente mi fa una domanda del genere quindi ero confuso quindi ho pensato di fare una domanda qui su Stackoverflow – Kiran
Ho trovato quella lettura di La specificazione della lingua C# è abbastanza illuminante in questi casi :) – Regent
E ovviamente provare il codice in Visual Studio ti darà molte informazioni. –
perché dovresti volerlo? – Pondidum
'C# .NET', bello ... –
Non è un errore di compilazione? – ironic