Abfragen ob eine Liste befüllt ist ...

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Abfragen ob eine Liste befüllt ist ...

    Hi,

    Ich befülle eine List of Strings ... allerdings kann dies auch scheitern:

    VB.NET-Quellcode

    1. Dim ValueList As String()
    2. Try
    3. ValueList = RegKey.GetValueNames
    4. Catch ex As Exception
    5. sw.WriteLine(" " & NOVALUENAMES)
    6. End Try
    7. For Each ValueName In ValueList
    8. ...


    Klar, die "For Each" Anweisung bringt mir die Fehlermeldung:

    Warnung 1 Die ValueList-Variable wird verwendet, bevor ihr ein Wert zugewiesen wird. Zur Laufzeit kann eine Nullverweisausnahme auftreten.

    Und natürlich kracht mein Programm, wenn ich in den "Catch-Zweig" gelange.

    Wie fange ich das denn vernünftig ab? Ich möchte einfach die For-Schleife nicht ausführen, wenn es keine ValueList gibt! Das sollte doch machbar sein!

    Wie so oft: umgehen kann ich das mit einem Flag ... aber ich will ja lernen, wie man das"richtig" macht! :D

    LG
    Peter
    Moin,

    verlasse im Catch-Block die Methode (​Return), wenn das möglich ist.. Oder du benutzt dein besagtes Flag. Oder den ganzen Kram mit ins Try und nur die Exception fangen, die auch auftreten kann. Da gibt es viele Möglichkeiten.

    BTW: Du solltest ValueList initialisieren: ​Dim ValueList As String() = Nothing.
    Mit freundlichen Grüßen,
    Thunderbolt
    Das kann nicht scheitern.
    Also mach den TryCatch weg, dann verschwindet auch der Pseudo-Fehler.

    Einfach

    VB.NET-Quellcode

    1. Dim ValueList = RegKey.GetValueNames
    2. For Each ValueName In ValueList
    3. ...
    ist die Liste leer, dann geht er ja garnet ins For rein.
    Oder halt list.Length abfragen

    PS: der Name ist natürlich sch... . Es ist keine List, sondern ein Array, und es sind keine Values sondern Names - muss also heissen:

    VB.NET-Quellcode

    1. Dim ValueNames = RegKey.GetValueNames
    2. For Each ValueName In ValueNames
    3. ...
    Mit der Falsch-Benamung obfuskierst du gradezu deinen Code.
    Also erst mal herzlichen Dank an die Ratgeber!

    @Thunderbolt

    Ich habe jetzt den Array mit "nothing" inialisiert ... undd damit ist der Nullverweis Fehler weg. Nun kann ich auf "Is nothing" abfragen ... und schon läuft mein Programm fehlerfrei.

    ErfinderDesRades schrieb:

    Das kann nicht scheitern.


    Das finde ich jetzt aber ein bissl blöde. Von wegen "Pseudo Fehler". Klar kann das scheitern ... und es scheitert mehr als nur einmal, insbesondere wegen fehlender Autorisierung (selbst wenn man das als Admin ausführt)!

    LG
    Peter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()

    achso, das kann sein - ich mach nicht viel mit Registry.
    Der ThredTitel verleutete mich, anzunehmen, der angenommene Fehler hätte was mit "befüllt sein" zu tun.
    Hat er nicht.
    Ich empfehle in diesem Fall, genau die System.Security.SecurityException zu catchen, nicht jede mögliche.

    Und dann ist halt Frage, wie's weiter gehen soll. Wäre ok, wenn das Array im falle fehlender Rechte leer bleibt? dann initialisiere einfach mit

    VB.NET-Quellcode

    1. Dim ValueList(-1) As String