Un problema si presentava su un altro forum e sapevo come risolverlo, ma rivelava una caratteristica del compilatore peculiare per me. La persona stava ricevendo l'errore "L'istruzione incorporata non può essere una dichiarazione o un'istruzione etichettata" perché avevano una dichiarazione di una variabile che segue un'istruzione if senza parentesi. Non era quello il loro intento, ma avevano commentato la riga di codice immediatamente successiva all'istruzione if, che rendeva la dichiarazione delle variabili la linea di codice de facto da eseguire. Ad ogni modo, quello è lo sfondo, che mi porta a questo.Dichiarazioni di variabili che seguono se dichiarazioni
Il seguente codice è illegale
if (true)
int i = 7;
Tuttavia, se si avvolge che tra parentesi, è tutto legale.
if (true)
{
int i = 7;
}
Nessun pezzo di codice è utile. Eppure il secondo è OK. Qual è in particolare la spiegazione di questo comportamento?
Sono d'accordo, non ha senso a tutti di dichiarare una variabile in questo modo. Tuttavia la dichiarazione di variabile completamente inutile nel secondo esempio va bene. Né è di valore. È semplicemente una questione di parentesi, nient'altro? (A proposito, posso conviverci.) –
Sì. Le tue intenzioni sono assolutamente chiare al compilatore quando includi le parentesi, quindi lo permetterà. Il compilatore C# non lo consentirà senza parentesi, poiché non è chiaro che la tua intenzione effettiva sia dichiarare una variabile inutile. –
Ma il secondo potrebbe benissimo essere di valore - se, ad esempio, il valore viene recuperato da un metodo che ha effetti collaterali. –