foreach mit List<T> funktioniert nicht
-
Moin,
ich habe ein kleines Problem. Ich möchte eine kleine Abfrage mache und dabei nachgucken ob ein bestimmter Inhalt vorhanden ist. Die Liste soll generisch bleiben. Leider entsteht ein Laufzeitfehler, den ich nicht so recht deuten kann. Ich arbeite mit Visual C# 2008 mit einer Windows Forms Oberfläche.
Bei meiner Abfrage komme ich leider nicht zum Erfolg.:List<string> RequirementLevel = new List<string>(); RequirementLevel.Add("Level 1"); RequirementLevel.Add("Level 2"); RequirementLevel.Add("Level 3"); RequirementLevel.Add("Level 4"); RequirementLevel.Add("Level 5"); RequirementLevel.TrimExcess(); //die eigentliche Abfrage foreach(string Level in Requirementlevel) { if(txtBox.Text.Contains(RequirementLevel[Convert.ToInt32(Level)])) { lblErgebnis.Text = RequirementLevel[Convert.ToInt32(Level)]; return; } } lblErgebnis.Text ="Keine Übereinstimmung vorhanden"; return;
Hat einer von Euch eine Idee, wo der Bock bei mir liegt?
Vielen Dank
Sven
-
Was meinst du, was herauskommt, wenn du "Level 1" in Int32 konvertierst?
Und noch ein Tipp für die Zukunft, wenn's mal nicht so offensichtlich ist wie hier:
Auch wenn du die Fehlermeldung nicht deuten kannst, solltest du sie trotzdem nicht verschweigen. Einem Anderen sagt sie womöglich mehr.
-
Ich hoffe doch die Position 0
-
sventesker schrieb:
Leider entsteht ein Laufzeitfehler
Alle in Deckung, er hat DEN LAUFZEITFEHLER!!!
Mal im Ernst, es kann unheimlich helfen wenn man Fehlermeldungen die man nciht versteht auch POSTED, denn es gibt tatsächlich mehr als nur einen Laufzeitfehler und es kann ungemein helfen wenn man wüßte welchen Fehler Du denn bekommst.
sventesker schrieb:
foreach mit List<T> funktioniert nicht
foreach funktioniert einwandfrei, DU machst etwas falsch
Btw, welchen Zahlenwert sollte denn deiner Meinung nach der String "Level 1" ergeben wenn man ihn in eine Zahl umwandelt?
-
sventesker schrieb:
Ich hoffe doch die Position 0
Hoffnung hat in der Softwareentwicklung NICHTS verloren. Und nein, Position 0 kommt garantiert nicht raus
-
sventesker schrieb:
Ich hoffe doch die Position 0
Du wandelst einen String in eine Zahl um.
Convert.ToInt32("Level 1")
Wie soll da irgendeine "Position" herauskommen?
-
Wie kriege ich denn die Position vom "Level 1" heraus?
Ich hatte nämlich List<T> so verstanden, dass jeder Inhalt(hier ein String) auch mit der Position angesprochen werden kann. Also wie bei einem Array, nur eben halt dynamisch. Scheinbar habe ich das irgendwo ein verständnisproblem zu List<T>. Wenn ich die Variable Level umwandle in ein Integer. Kommt da also nicht die Position heraus. Wie kriege ich denn die Position? Muss ich da extra eine Variable Zählervariable definieren und mitlaufen lassen? Und diese dann einsetzen?
-
sventesker schrieb:
Wie kriege ich denn die Position vom "Level 1" heraus?
Wofür brauchst du denn die Position? Bisher prüfst du doch nur, ob der Text in der Liste vorkommt. Du hast da irgendwie versucht, die Position reinzuwurschteln, aber wozu?
Um zu prüfen, ob ein String in der Liste steht, brauchst du gar keine Schleife, das erledigt die Find-Methode.
-
Das stimmt soweit. Die Position brauch ich später noch. Ich habe aber ingesamt zu kompliziert gedacht. Aber es läuft nun
Eurer Hinweis hat mich auf die richtige fährte gebracht. Ich dachte nämlich, wenn ich Level umwandel in ein Int. Dass der mir dann die Position ausspuckt. Aber Level ist ja nur eine ganz normale string Variable(ich weiß, in Wirklichkeit ein Objekt).
Ich hab es nun wie folgt gelöst:... foreach (string Level in RequirementLevel) { if(textBox.Text.Contains(Level)) { lblErgenis.Text = "Ihr " + Level + " befindet sich auf Position " + Convert.ToString(RequirementLevel.IndexOf(Level)); return; } }
-
Dass du mit Contains nach einem Teilsting suchst, ist bekannt und beabsichtigt?