C# auf Variable in Foreach-Schleife zugreifen

estre

Commander
Dabei seit
Dez. 2005
Beiträge
3.005
Hallo zusammen,

Kann man in C# nicht auf Variablen innerhalb einer foreach-Schleife zugreifen ?

Ich habe nämlich eine Schleife die eine bestimmte Aufgabe ausführt und etwas in einer variable speichern soll, also z.B:


Code:
Foreach ()
{
         if (....)
         {
               String name = „Olaf“
         }
}

Messagebox.Show(name);
Wenn ich dies ausführen möchte, dann wird die Variable außerhalb der foreach nicht mehr erkannt („Der Name "name" ist im aktuellen Kontext nicht vorhanden.“)


Habe ich irgendetwas nicht bedacht ?


Grüße
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.631
Du musst die Variable vor der Schleife deklarieren. Siehe Gültigkeitsbereich von Variablen.
 

estre

Commander
Ersteller dieses Themas
Dabei seit
Dez. 2005
Beiträge
3.005
Hey,

das habe ich auch schon probiert, aber dann kommt ebenfalls diese Fehlermeldung :(
 

Grundkurs

Lt. Commander
Dabei seit
Feb. 2012
Beiträge
1.377
Das Problem ist, dass der scope der string-variable "name" nur innerhalb der geschweiften Klammer in der sie sich befindet reicht. Außerhalb der geschweiften Klammer kann daher nicht auf sie zugegriffen werden.
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.631
Mit
Code:
string name = "";
foreach ()
{
         if (....)
         {
               name = "Olaf";
         }
}

Messagebox.Show(name);
funktioniert es definitiv.
 

estre

Commander
Ersteller dieses Themas
Dabei seit
Dez. 2005
Beiträge
3.005
@Yuuri

wie geschrieben, so funktioniert es auch nicht ^^

@Grundkurs
und wie löst man das ganze dann am besten ? die Schleife brauche ich aufjedenfall ..
 

holy

Lieutenant
Dabei seit
Aug. 2008
Beiträge
533
Mit
Code:
string name = "";
foreach ()
{
         if (....)
         {
               name = "Olaf";
         }
}

Messagebox.Show(name);
funktioniert es definitiv.
@Yuuri

wie geschrieben, so funktioniert es auch nicht ^^
Wie Yuuri geschrieben hat, so funktioniert es definitiv. Wenn du da einen Fehler kriegst, hast du ein ganz anderes Problem. Poste bitte die Fehlermeldung, die du bekommst.
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.631
Doch so geht es! Poste sonst mal den gesamten Code, dann muss es irgendwo anders haken.
 

das Neutrum

Lt. Junior Grade
Dabei seit
Nov. 2006
Beiträge
460
Zur Not name als private der Klasse deklarieren.
 

estre

Commander
Ersteller dieses Themas
Dabei seit
Dez. 2005
Beiträge
3.005
Hey,

zunächst mal Danke für Eure zahlreichen Beiträge!

Anbei mal ein Stück Code:

Code:
private void buttonProgrammStart_Click_1(object sender, RoutedEventArgs e)
        {
            string beschreibung = "";
            
            vorname = textBoxName.Text;
            name = textBoxName.Text;
            vgruppe = textBoxVGruppe.Text;

            string ou = vgruppe.ToUpper();
            string benName = userName.ToUpper();

            if (vorname == "" | name =="" | domaene == "" | benName == "")
            {
                MessageBox.Show("Sie haben unvollständige Daten eingegeben!");
                return;
            }
                        
            if (ou == "V01" | ou == "V02" | ou == "V03" | ou == "V04" | ou == "V07" | ou == "V08")
            {
                XmlDocument doc = new XmlDocument();
                doc.Load("AD_CONFIG.xml");
                

                XmlNodeList wurzel = doc.GetElementsByTagName("VGruppe");
                foreach (XmlNode node in wurzel)
                {

                    XmlElement bookElement = (XmlElement)node;

                    beschreibung = bookElement.GetElementsByTagName("Beschreibung")[0].InnerText;

					.
					.
					.
                }
                    
                    MessageBox.Show(beschreibung); 
                   
	    }
			
	}
In Zeile 37 erscheint die Fehlermeldung, wie oben beschrieben.

Grüße
 

holy

Lieutenant
Dabei seit
Aug. 2008
Beiträge
533
Code:
if ( string.IsNullOrEmpty( beschreibung ) )
{
    MessageBox.Show( "Letzte InnerText war null" );
}
else
{
    MessageBox.Show(beschreibung); 
}
 

estre

Commander
Ersteller dieses Themas
Dabei seit
Dez. 2005
Beiträge
3.005
hey,

sry, aber ich verstehe nicht was das mit der Lösung meines Problemes zu tun hat... ^^

Grüße
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
12.631
Na wenn du nicht debuggen willst, "müssen" wir wohl den Part für dich übernehmen. Wie lautet denn die genaue Fehlermeldung? Und probier das von holy aus.
 

holy

Lieutenant
Dabei seit
Aug. 2008
Beiträge
533
Hm, du hast recht.
Habe es grad ausprobiert, bin eigentlich davon ausgegangen, dass Show() eine Exception wirft, wenn der Wert null ist. Tut es aber nicht :)

Und du bist sicher, dass das der Code ist, der dir den Fehler gibt? Ich meine, da ist sonst nichts falsch. "beschreibung" ist in der kompletten Methode "verfügbar".
Ergänzung ()

„Der Name "name" ist im aktuellen Kontext nicht vorhanden.“

Das ist die exakte Fehlermeldung?
"name" ist aber schon ein Member-Variable und nicht irgendwo lokal deklariert?
 

estre

Commander
Ersteller dieses Themas
Dabei seit
Dez. 2005
Beiträge
3.005
Hey,

nochmals vielen Dank für Eure Hilfe!

die genaue Exception werde ich morgen mal posten (wenn ich wieder auf der Arbeit bin), grundsätzlich springt das Programm (WPF-Anwendung) beim debugging immer an dieser Stelle aus und auch im normalen Editiermodus wird mir dieser part rot unterkringelt.
Am Anfang dachte ich, dass Visualstudio einfach nur etwas "hinterher hängt" was die Auflösung der Variablen angeht, aber selbst nach mehreren Minuten war es immernoch unterstrichen^^ ... ..ich kann mir das ganze echt nicht erklären...



Der Hintergrund von dem ganzen ist übrigens, dass ich in der Foreach-Schleife durch die nodes eines XML-Datei parse und sobald ein node einen bestimmten Attributwert hat (z.B. <Person Name="Olaf"><Person>) möchte ich jeweils den Text aller child nodes von diesem tag haben und in verschiedene Variablen speichern (eine davon ist eben die Beschreibung).


Grüße




Ergänzung ()



Hallo zusammen,

Wie oben beschrieben erhalte ich folgenden Fehler, wenn ich die Variable außerhalb der Klammer ansprechen möchte:

Verwendung der nicht zugewiesenen lokalen Variablen "beschreibung"
Zudem ist die Variable blau unterkringelt.

Reicht das an Informationen ? Eine genauere Exception konnte ich nicht finden, wenn ich das Projekt ausführe, erhalte ich die typische Meldung, dass beim erstellen ein Fehler entdeckt wurde und ob der Vorgang mit dem letzten erfolgreichen Build ausgeführt werden soll.

Grüße
 
Zuletzt bearbeitet:

holy

Lieutenant
Dabei seit
Aug. 2008
Beiträge
533
Der Fehler bedeutet, dass in deinem Code nicht
Code:
string beschreibung = "";
if ( ... )
{
    irgendwas( beschreibung );
}
steht, sondern einfach nur
Code:
string beschreibung;
if ( ... )
{
    irgendwas( beschreibung );
}
Du musst beschreibung erst initialisieren.
Z.B.
Code:
string beschreibung = string.Empty;
// oder 
string beschreibung = "";
 

estre

Commander
Ersteller dieses Themas
Dabei seit
Dez. 2005
Beiträge
3.005
Hi,

Stimmt, jetzt geht es ! Danke!

Eigentlich hatte ich es auch so definiert und es gab trotzdem diesen Fehler. Aber ist letzendlich auch egal :)

Grüße
 

Xetoxyc

Lieutenant
Dabei seit
Nov. 2010
Beiträge
872
hast du anscheinend aber nicht sonst funktioniert es definitiv xD....
es ist ein programm... und es funktioniert hald mal so...
und nicht sporadisch einmal so und einmal anders
 
Top