C# auf Variable in Foreach-Schleife zugreifen

estre

Commander
Registriert
Dez. 2005
Beiträge
3.006
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
 
Du musst die Variable vor der Schleife deklarieren. Siehe Gültigkeitsbereich von Variablen.
 
Hey,

das habe ich auch schon probiert, aber dann kommt ebenfalls diese Fehlermeldung :(
 
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.
 
Mit
Code:
string name = "";
foreach ()
{
         if (....)
         {
               name = "Olaf";
         }
}

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

wie geschrieben, so funktioniert es auch nicht ^^

@Grundkurs
und wie löst man das ganze dann am besten ? die Schleife brauche ich aufjedenfall ..
 
Yuuri schrieb:
Mit
Code:
string name = "";
foreach ()
{
         if (....)
         {
               name = "Olaf";
         }
}

Messagebox.Show(name);
funktioniert es definitiv.

estre schrieb:
@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.
 
Doch so geht es! Poste sonst mal den gesamten Code, dann muss es irgendwo anders haken.
 
Zur Not name als private der Klasse deklarieren.
 
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
 
Code:
if ( string.IsNullOrEmpty( beschreibung ) )
{
    MessageBox.Show( "Letzte InnerText war null" );
}
else
{
    MessageBox.Show(beschreibung); 
}
 
hey,

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

Grüße
 
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.
 
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?
 
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:
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 = "";
 
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
 
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
 
Zurück
Oben