Entwickler-Ecke
Basistechnologien - List durchsuchen
master147 - Sa 19.05.12 21:49
Titel: List durchsuchen
Hallo,
ich habe eine Klasse in der sich 2 Listen (Beweg und Fest) befinden. Nun wollte ich eine Suchfunktion bauen, die die beiden Listen in der Klasse durchsucht.
Dabei bin ich auch List.FindAll gestoßen.
Leider ist in meiner Methode noch irgend ein Fehler drin.
Hier die Suchfunktion:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public static List<string> Suche(string Feiertag) { string s; List<string> Suche = new List<string>(); return Suche.FindAll(s=>Beweg.Contains(Feiertag)); } |
Dabei bekomme ich die Meldung: Fehler:
Zitat: |
Eine lokale Variable mit dem Namen "s" kann in diesem Bereich nicht deklariert werden, weil dadurch "s" eine andere Bedeutung erhalten würde, was bereits im Bereich "übergeordnet oder aktuell" in anderer Bedeutung verwendet wird.
|
Leider weiß ich nicht was daran falsch ist. Ich hoffe ihr könnt mir helfen.
Th69 - So 20.05.12 09:48
Hallo,
entferne einfach die Variable string s. Bei Lambda-Ausdrücken (=>) erzeugt der Compiler aus der Methodendeklaration die passenden Datentypen für die angegebenen Variablennamen.
master147 - So 20.05.12 11:03
Hallo,
danke für den Tipp.
Aber irgend etwas ist immer noch falsch. Denn die Suchmethode greift nicht auf die Liste in der darüberliegenden Methode zu.
Es wird zwar die die Sucheingabe zur Klasse weitergeleitet und auch von der Suchmethode bearbeitet, allerdings greift diese dann nicht auf die Liste zu.
Christian S. - So 20.05.12 11:22
Du hast eine leere List "Suche" erstellt. Was erwartest Du, wenn Du darin suchst ;-)
Und was ist "Beweg" und was hat das in dem Lambda-Ausdruck zu suchen :-)
Th69 - So 20.05.12 11:24
Hallo,
so wie der Code bisher ist, durchsuchst du ja auch eine
leere Liste.
Du willst doch deine beiden Listen durchsuchen, also
C#-Quelltext
1: 2: 3:
| var list = Beweg.FindAll(s => s == Feiertag);
var list2 = Fest.FindAll(s => s == Feiertag); |
Btw. statt
FindAll dürfte auch
Find ausreichen, denn die Feiertage wirst du ja wohl nicht doppelt in deinen Listen drin haben, oder?
Du solltest dir dann noch überlegen, was deine Methode
Suche dann als Rückgabewert sinnvollerweise zurückgeben sollte (m.E. würde ein
bool reichen).
master147 - So 20.05.12 12:33
Danke für die Hinweise,
aber ich glaube die Suchfunktion durchsucht immer noch eine leere Liste.
Kann das daran liegen, dass die Listen in zwei unterschiedlichen Methoden in der Klasse sind ?
C# - Fr 01.06.12 14:06
Hallo,
also daran dass du es in unterschiedlichen Methoden aufrufst kann es nicht liegen, es sei denn du deklarierst die Liste in einer anderen Methode, aber dann würde der Compiler sich beschweren.
Aber noch was anderes: Was willst du genaz bezwecken? Willst du überprüfen, ob es den angegebenen Feiertag gibt oder willst du wissen wann der nächste ist oder welches Datum der angegebene Feiertag hat?
Das ganze sollte ungefähr so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| public class DeineKlasse { Dictionary<string, DateTime> Feiertage = new Dictionary<string, DateTime>(); private DeineKlasse() { Feiertage.Add("Weihnachten", new DateTime(2012, 12, 24)); }
public bool FeiertagExistier(string name) { return Feiertage.ContainsKey(name); }
public string NächsterFeiertag(DateTime datum, out DateTime feiertagDatum) { KeyValuePair<string, DateTime> naechster = new KeyValuePair<string, DateTime>();
foreach (KeyValuePair<string, DateTime> feiertag in Feiertage) { TimeSpan aktuell = feiertag.Value.Subtract(datum); if (String.IsNullOrEmpty(naechster.Key) || aktuell < naechster.Value.Subtract(datum)) naechster = feiertag; }
feiertagDatum = naechster.Value; return naechster.Key; }
} |
Palladin007 - Fr 01.06.12 16:04
Poste doch mal den Code deiner Klasse.
Dann wird vielleicht auch klar, was genau du damit bezwecken willst oder dass du die Sache eventuell ganz falsch anfängst.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!