Funktion mit Array aufrufen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von mepema.

    Funktion mit Array aufrufen

    moin mon,

    der folgende Aufruf

    VB.NET-Quellcode

    1. 'Feld indizieren anhand der tatsächlichen Einträge
    2. Dim Zeiten(lvwListview.Items.Count) As String
    3. 'Die Werte aus dem Listview in das Array übernehmen
    4. For i = 1 To lvwListview.Items.Count
    5. Zeiten(i) = lvwListview.Items(i).SubItems(3).Text
    6. Next
    7. 'Testaufruf der Function
    8. Dummy = Spielzeit(Zeiten)

    soll die folgende Funktion aufrufen

    VB.NET-Quellcode

    1. Public Function Spielzeit(ByVal ParamArray Zeiten()) As String
    2. Spielzeit = "00:00"
    3. For i As Integer = 1 To Zeiten.GetUpperBound(0)
    4. Spielzeit = Zeiten(i)
    5. Next
    6. End Function

    und mir später einmal die Spielzeiten aller Musiktitel des ListView berechnen.
    Aber die Funktion wird gar nicht erst aufgerufen. Setze ich das "Dummy = Spielzeit(Zeiten) VOR die For-Next-Schleife, dann wird die Funkltion aufgerufen; natürlich ohne Inhalte.

    Natürlich ist die Function noch nicht fertig, aber ich sollte zumindest den letzten Array-Eintrag zurück bekommen....

    Bin ich heute blind oder mache ich einen Fehler?

    Gruß aus Berlin
    ParamArray ist schon mal falsch bzw unnötig. Das braucht man, wenn man eine unbekannte Anzahl Parameter hat, wie zb:

    VB.NET-Quellcode

    1. Private Sub foo(ByVal ParamArray a() As Integer)
    2. ' blip
    3. End Sub
    4. Private Sub bar()
    5. foo(1)
    6. foo(1, 2)
    7. foo(1, 2, 3)
    8. End Sub

    Die Anzahl deiner Parameter ist aber bekannt. Du übergibst nämlich genau EIN Array. Das hat ggfs eine unbekannte Länge, aber das macht keinen Unterschied.

    BTW: Deine Spielzeit Funktion macht irgendwie etwas unsinniges ...
    Danke für die Info zu ParamArray. Aber da ändert sich auch nicht.

    Die Funktion Spielzeit ist nur ein Versuch, weil ich mit dieser Array-Übergabe noch keine Erfahrung habe. Wichtig war erstmal nur, dass etwas passiert.

    Aber es passiert nix.

    mepema schrieb:

    Aber es passiert nix.

    Kann nicht. Der Code davor müsste nämlich nen Fehler werfen. Du machst nämlich ne Schleife von 1 bis Count und verwendest das dann als Index. Es gibt aber kein Item(...Count), sondern nur Count-1, da (ziemlich alle) Indizes in VB.Net NULL-basiert sind. D.h. das erste Item ist Index 0 und so weiter.

    VB.NET-Quellcode

    1. Dim l As New ListView
    2. l.Items.Add("A")
    3. Debug.Print(l.Items.Count) ' -> 1
    4. Debug.Print(l.Items(l.Items.Count).ToString()) ' Error!!!!