Abfragen einer Liste bei nicht existierenden Suchbegriff

  • C#

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    Abfragen einer Liste bei nicht existierenden Suchbegriff

    Hallo,

    ich habe eine Liste mit Fehlercodes und den dazugehörigen Texten.

    C#-Quellcode

    1. internal class Error
    2. {
    3. internal string Code { get; set; }
    4. internal string Text { get; set; }
    5. }
    6. private List<Error>Errors = new List<Error>();


    In dieser Liste such ich den Fehlertext wie folgt:

    C#-Quellcode

    1. string ErrText = Errors.First(item => string.Equals(Selected, item.Code)).Text;


    Das geht auch solange gut, wie ich Fehlercodes suche, die auch tatsächlich in die Liste eingetragen sind. Es gibt natürlich eine Ausnahme, sobald ein Code gesucht wird, der nicht in der Liste existiert.
    Ich bin zu doof die Abfrage so zu verbessern, dass sie einen Leerstring liefert, wenn nichts gefunden wird. Und eine Try-Catch möchte ich vermeiden.

    Kann mir jemand helfen?

    Dksksm schrieb:

    dass sie einen Leerstring liefert, wenn nichts gefunden wird
    Offensichtlich sind die Fehlerstrings einmalig.
    Nimm ein Dictionary(Of String, String) und pack da Deine Code-Text-Paare rein.
    Das Dictionary kannst Du fragen, ob ein Key vorhanden ist und dann entsprechend reagieren:

    VB.NET-Quellcode

    1. Dim dct As New Dictionary(Of String, String)
    2. dct.Add("key1", "value1")
    3. dct.Add("key2", "value2")
    4. dct.Add("key3", "value3")
    5. dct.Add("key4", "value4")
    6. If Not dct.ContainsKey("key5") Then
    7. MessageBox.Show("key5 nicht vorhanden")
    8. ' was tun
    9. Else
    10. ' was anderes tun
    11. End If

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dksksm schrieb:

    Das geht auch solange gut, wie ich Fehlercodes suche, die auch tatsächlich in die Liste eingetragen sind. Es gibt natürlich eine Ausnahme, sobald ein Code gesucht wird, der nicht in der Liste existiert.
    Ich bin zu doof die Abfrage so zu verbessern, dass sie einen Leerstring liefert, wenn nichts gefunden wird. Und eine Try-Catch möchte ich vermeiden.
    Genau dafür ist .FirstOrDefault vorgesehen.

    C#-Quellcode

    1. Error err = Errors.FirstOrDefault(item => Selected = item.Code);
    2. string ErrText = err == null ? "WarNix!" : err.Text;

    Hallo @RodFromGermany und @ErfinderDesRades

    Danke für Eure Tips. Dictionary wäre gegangen, wollte ich hierfür abe rnicht verwenden. Ich wußte schon, dass es mit LINQ gehen würde, hatte aber die Beispiele die Google mir ausspukte nicht wirklich vollumfänglich verstanden.

    Ich hatte ganz vergessen, dass es ja so etwas ähnliches wie

    VB.NET-Quellcode

    1. IIF
    auch noch gibt. Danke @ErfinderDesRades für den Hinweis und den Code.
    Für mich funktioniert das hier

    C#-Quellcode

    1. Error err = Errors.FirstOrDefault(item => string.Equals(Selected, item.Code));
    2. ErrText = err == null ? "unbekannter Fehlercode" : err.Text;
    nun ganz hervorragend.