2013-02-12 23 views
7

voglio fare qualcosa di simile utilizzando C#:C# dichiarano variabile in istruzione if

if (i == 0) 
{ 
button a = new button(); 
} 
else 
{ 
TextBlock a = new TextBlock(); 
} 
mainpage.children.add(a); 

ma ottengo un errore che

di errore 1 Il nome 'un' non esiste nel contesto attuale

Qualche idea?

grazie in anticipo!

risposta

15

è necessaria una classe base comune che sia button e Textblock derivano da, e deve essere dichiarata al di fuori della dichiarazione if se si tratta di essere accessibile dopo l'if è completa. Control forse?

Control a; 
if (i == 0) 
{ 
a = new button(); 
} 
else 
{ 
a = new TextBlock(); 
} 
mainpage.children.add(a); 

Non sapendo cosa specifico kit di strumenti di controllo che si sta utilizzando (WPF forse?) Non posso consigliare ulteriormente. Ma guarderei la firma per Add per avere un indizio: come viene dichiarato il parametro?

+0

Tuttavia, la questione è più circa [scope] (http://msdn.microsoft.com/en-us/library/aa691132 (v = vs.71). aspx). Titolo: _ "declare la variabile in istruzione if" _ eccezione: _ "Il nome 'a' non esiste nel contesto corrente" _ –

+0

@TimSchmelter Questo è uno spaccare i capelli, a dire il vero. Questo indirizzo che, forse in modo indiretto, indirizza l'utente a un'alternativa e pensa di essere nuovo, ma ancora. –

+0

Grazie! ha funzionato completamente! –

6

Provare a dichiarare a al di fuori dell'ambito di if/else. Come questo:

Control a; 
if (i == 0) 
{ 
    a = new button(); 
} 
else 
{ 
    a = new TextBlock(); 
} 
mainpage.children.add(a); 
+0

Grazie! ha funzionato completamente! –

4

È è necessario dichiarare la variabile nell'ambito genitore e assegnargli una classe base comune. La classe di base comune per System.Windows.Controls.TextBlock e System.Windows.Controls.Button può essere ad esempio System.Windows.UIElement o System.Windows.FrameworkElement. Quindi, il codice può apparire come questo:

UIElement a; 
if (i == 0) 
{ 
    a = new Button(); 
} 
else 
{ 
    a = new TextBlock(); 
} 
mainpage.children.add(a); 
+0

Grazie! ha funzionato completamente! –