2013-02-12 4 views
7

Ich möchte so etwas wie dieses mit C# tun:C# erklären Variable in if-Anweisung

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

Aber ich erhalte eine Fehlermeldung, dass

Fehler 1 Der Name 'a' existiert nicht in der aktueller Kontext

Irgendwelche Ideen?

danke im voraus!

Antwort

15

Sie brauchen eine gemeinsame Basisklasse, die sowohl button und Textblock aus ableiten, und es muss außerhalb der if Anweisung deklariert werden, wenn sie zugegriffen werden kann ist, nachdem der if abgeschlossen ist. Control vielleicht?

Nicht wissend, welche spezifischen Control Toolkit Sie verwenden (WPF möglicherweise?) Ich kann nicht weiter beraten. Aber ich würde mir die Signatur für Add ansehen, um einen Hinweis zu bekommen - wie lautet der Parameter?

+0

Doch die Frage ist, mehr über [Bereiche] (http://msdn.microsoft.com/en-us/library/aa691132 (v = vs.71). aspx). Titel: _ "Variable in If-Anweisung deklarieren" _ Ausnahme: _ "Der Name 'a' existiert nicht im aktuellen Kontext" _ –

+0

@TimSchmelter Das ist Haare spalten, um ehrlich zu sein. Dies adressiert das, vielleicht auf Umwegen, das den Benutzer zu einer Alternative führt und denkt, dass sie neu sind, aber immer noch. –

+0

Danke! es hat total funktioniert! –

6

Versuchen Sie, a außerhalb des Bereichs der if/else zu deklarieren. Wie folgt aus:

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

Danke! es hat total funktioniert! –

4

Sie Sie müssen Ihre Variable im übergeordneten Bereich deklarieren und ihr eine gemeinsame Basisklasse zuweisen. Die gemeinsame Basisklasse für System.Windows.Controls.TextBlock und 10 kann beispielsweise System.Windows.UIElement oder System.Windows.FrameworkElement sein. So Ihr Code kann wie folgt aussehen:

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

Danke! es hat total funktioniert! –