List(of T).FindIndex - ArgumentNullException abfangen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von cl10k.

    List(of T).FindIndex - ArgumentNullException abfangen

    Hallo,

    ich möchte in einer Function mit Rückgabetyp Integer, eine List(of T) nach einem bestimmten Index durchsuchen - dazu benutze ich FindIndex. Allerdings muss nicht immer ein entsprechender Listeneintrag gefunden werden - in diesem Fall wirft FindIndex (lt. MSDN) eine ArgumentNullException. Soweit klar - nur wie reagiere ich auf eine solche Exception? Mir ist die Syntax gar nicht klar, die man braucht, um das auftauchen einer Exception abzufangen...

    lg
    Nach welcher Eigenschaft filterst du den?
    Du kannst es auch so machen, dann kriegst du alle gefundenen Wörter zurück & keine Exception:


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private words As New List(Of String) From {"Hallo", "Welt", "Leben", "Welt", "Hallo", "Test"}
    3. Iterator Function find(ByVal liste As List(Of String), ByVal name As String) As IEnumerable(Of Integer)
    4. For elements = 0 To liste.Count - 1
    5. If liste(elements) = name Then 'Irgendeine Eigenschaft
    6. Yield elements
    7. End If
    8. Next
    9. End Function
    10. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    11. find(words, "Hallo").ToList.ForEach(Sub(item) MessageBox.Show(item.ToString))
    12. End Sub
    13. End Class


    In diesem Beispiel wird der Index aller Elemente die "Hallo" sind zurückgegeben.
    Kannst es dann umschreiben, jenachdem welches Prädicat
    @cl10k:
    Lt. msdn.microsoft.com/de-de/library/vstudio/x1xzf2ca.aspx wird diese Exception geworfen wenn match (also der Parameter für FindIndex) Nothing ist.

    lg

    EDIT:
    Ausserdem könnte man sich das auch zusammendichten wenn die Exception "ArgumentNullException" heißt:
    Argument = Parameter; Null = Nothing in VB; Exception = Fehler
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Kurz zur Erklärung:

    Ich hatte die Fragestellung überhaupt nicht am Rechner ausprobiert (zu diesem Zeitpunkt kein VS zur Hand). Ich hatte mir über die Umsetzung eines Problems Gedanken gemacht und bin dann dabei auf die Frage gekommen, was FindIndex wohl ausspuckt wenn das Suchkriterium nicht erfüllt wird. Also flugs MSDN überflogen und ohne weiter Nachzudenken diese Exception aus dem Text herausgelesen. Meine Frage zielte darauf ab, wie ich sowas hier formuliere:

    Wenn beliebigeException auftaucht dann ...


    ABER

    EDR hat offensichtlich besser gelesen und Recht. Das Ding wirft einfach eine -1 und wie ich das auswerte ist mir klar. Ich lerne daraus in Zukunft genauer zu lesen (und später zu posten)...

    @EDR: Danke!


    @fichz: Was diese Exception bedeutet war hier nie die Frage...

    @VB1963: das hat sich dann erledigt

    @RushDen:

    Ich suche eine Liste die mit einer eigenen (custom) Klasse gefüllt ist, nach einer Property "Validated" durch. Also nach dem Muster:

    Quellcode

    1. Dim i As Integer
    2. i=TabList.FindIndex(Function (c) c.Validated=False)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private words As New List(Of EigeneKlasse) From {New EigeneKlasse With {.validated = True}, New EigeneKlasse With {.validated = False}}
    3. Iterator Function find(ByVal liste As List(Of EigeneKlasse), ByVal bool As Boolean) As IEnumerable(Of Integer)
    4. For elements = 0 To liste.Count - 1
    5. If liste(elements).validated = bool Then 'Irgendeine Eigenschaft
    6. Yield elements
    7. End If
    8. Next
    9. End Function
    10. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    11. find(words, False).ToList.ForEach(Sub(item) MessageBox.Show(item.ToString)) 'Index von allen Klassen die validated auf False haben
    12. find(words, True).ToList.ForEach(Sub(item) MessageBox.Show(item.ToString)) 'Index von allen Klassen die validated auf True haben
    13. End Sub
    14. End Class
    15. Public Class EigeneKlasse
    16. Public Property validated As Boolean
    17. End Class


    Das sollte gehen.
    find() gibt dir dann alle indizes wieder und nicht nur den ersten (kA ob du das brauchst, aber habs mal so gemacht)

    cl10k schrieb:

    Ich lerne daraus in Zukunft genauer zu lesen (und später zu posten)...
    Meist ist es hilfreich, einen Haltepunkt (F9) vor die betreffende Zeile zu setzen und dann den Inhalt der relevanten Variablen zu überwachen (klick drauf, Shift+F9). Gugst Du hier.
    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!
    @cl10k:
    Mein Post zielte darauf ab, dass du irgendwas von einer Exception daherplaperst und eigentlich keine Ahnung hattest WARUM diese überhaupt geworfen wird.
    Somit erläuterte ich, dass diese Exception nur dann auftritt wenn das Argument (Parameter) Null (Nothing) ist.

    Um deinen Horizont nochmals zu erweitern war ich so frei und hab dir die Exception aufgelöst, was denn diese nun bedeutet. Somit konnte man darauf schließen , dass diese nicht im entferntesten etwas damit zu tun hatte wenn kein Item gefunden werden würde.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:


    ...daherplaperst...

    ...Um deinen Horizont nochmals zu erweitern...
    lg


    Ich bin dankbar für jede Hilfe! Schön das du dir die Zeit genommen hast! Wie du gemerkt hast, dauerte es eine Weile bis mir mein Irrtum klar wurde.

    Wäre es zuviel verlangt gewesen, wenn du dich in deinem letzten Post etwas weniger offensiver Stilmittel bedient hättest? Es gibt doch keinen vernünftigen Grund dafür, im Grundlagenbereich derartige sprachliche Spitzen einzusetzen - das macht es doch für alle nur schwerer.
    Das hab ich bewusst so verfasst, da du in Post 6, in meinen Augen, mir gegenüber etwas "hinterfotzig" geschrieben hast, obwohl ich es gut gemeint hatte.
    Ich hab in Post 5 versucht dies einfach zu vermitteln. Die Info über die Exception ist mMn. auch in Zukunft hilfreich für dich. Ich hoffe, dass du das nicht in den falschen Hals bekommen hast, den das war nicht meine Absicht.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten