Array auf Definition prüfen

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

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

    Array auf Definition prüfen

    Hallo,
    im folgenden Codebeispiel deklariere ich ein Array. In einer Schleife wird dieses bei Bedarf gefüllt. Nach der Schleife soll etwas damit gemacht werden. Dazu wird geprüft, wieviele Elemente das Array hat. Allerdings bekomme ich eine Fehlermeldung, weil es auch sein kann, dass das Array in der Schleife nicht gefüllt wird. Wie kann ich prüfen, ob das Array gefüllt wurde?

    VB.NET-Quellcode

    1. Dim AktuellerEintrag() As String
    2. Dim X As Integer
    3. X = 0
    4. Do Until X >= Slideshowkatalogliste.Count
    5. AktuellerEintrag = Slideshowkatalogliste.Item(X).Split(","c)
    6. If AktuellerEintrag(0) = SlideshowName Then
    7. Exit Do
    8. End If
    9. X += 1
    10. Loop
    11. If AktuellerEintrag.Count <= 5 Then
    12. Exit Sub
    13. Else
    14. SlideshowEffekt = CInt(Val(AktuellerEintrag(1).ToString))
    15. SlideshowRichtung = CInt(Val(AktuellerEintrag(2)))
    16. SlideshowGeschwindigkeit = CInt(Val(AktuellerEintrag(3)) * 5)
    17. '...
    18. End If

    Fehlermeldung:
    Fehler BC42104 Die AktuellerEintrag-Variable wird verwendet, bevor ihr ein Wert zugewiesen wird. Zur Laufzeit kann eine Nullverweisausnahme auftreten.

    Natürlich könnte ich bei der Deklaration gleich einen Wert zuweisen, damit sie später nicht leer ist, aber das wäre nur eine unsaubere Lösung.

    tron25 schrieb:

    aber das wäre nur eine unsaubere Lösung.
    Nö, das ist die richtige Lösung.
    Der Compiler erkennt, dass Deine Do-Loop-Schleife übersprungen werden könnte.
    Mach da eine For-Schleife hin, das ist einfacher zu lesen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. For X = 0 To Slideshowkatalogliste.Count
    2. AktuellerEintrag = Slideshowkatalogliste.Item(X).Split(","c, 2)
    3. If AktuellerEintrag(0) = SlideshowName Then
    4. Exit For
    5. End If
    6. Next
    7. If AktuellerEintrag != Nothing AndAlso AktuellerEintrag.Count <= 5 Then
    8. Exit Sub
    9. End If
    10. SlideshowEffekt = CInt(Val(AktuellerEintrag(1).ToString))
    11. SlideshowRichtung = CInt(Val(AktuellerEintrag(2)))
    12. SlideshowGeschwindigkeit = CInt(Val(AktuellerEintrag(3)) * 5)
    13. '...
    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!
    Ich habe es nun folgendermaßen gelöst:

    VB.NET-Quellcode

    1. Dim AktuellerEintrag(0) As String
    2. For Each Zeile In Slideshowkatalogliste
    3. AktuellerEintrag = Zeile.Split(","c)
    4. If AktuellerEintrag(0) = SlideshowName Then
    5. Exit For
    6. End If
    7. Next
    8. If AktuellerEintrag.Count <= 5 Then
    9. '.....
    10. End If


    Bei deiner If-Abfrage gibt er mir den gleichen Fehler zurück. Wahrscheinlich, weil er auf "Nothing" und auch auf die Anzahl prüft. Bei der Anzahl bekommt er ein Problem, wenn "Nothing" wahr ist.

    Trotzdem vielen Dank für deine Hilfe. Du hast außerdem recht, dass eine For-Schleife in diesem Fall besser lesbar ist.