Tuples als Funktionsrückgabe

  • VB.NET
  • .NET 5–6

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

    Tuples als Funktionsrückgabe

    Moin,

    in der Regel verwende ich entweder bekannte Typen (String, Integer ...) oder eigene Klassen als Rückgabewert für Funktionen.
    Nun kommt es hin und wieder mal vor, dass es sich oft nicht lohnt für Kleinigkeiten eine extra Klasse anzulegen.

    learn.microsoft.com/en-us/dotn…eatures/data-types/tuples hier beschreibt Microsoft, wie sie sich Tuples als Rückgabewerte vorstellen.

    Als Beispiel

    VB.NET-Quellcode

    1. Public Function ParseInteger(value As String) As (Success As Boolean, Number As Integer)
    2. Dim number As Integer
    3. Return (Integer.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, number), number)
    4. End Function


    Und hier ein Beispiel von mir

    VB.NET-Quellcode

    1. Public Shared Sub DoSomthing()
    2. Dim Result = DoStuff({1, 2, 3, 4, 5, 6, 7, 8, 9, 0})
    3. MessageBox.Show("Neu: " & Result.Item1 & Cnst.Crlf &
    4. "Aktualisiert: " & Result.Item2 & Cnst.Crlf &
    5. "Enthält Fehler: " & Result.Item3)
    6. End Sub
    7. Public Shared Function DoStuff(IDs As IEnumerable(Of Integer)) As Tuple(Of Integer, Integer, Boolean)
    8. Dim Inserts As Integer = 0
    9. Dim Updates As Integer = 0
    10. Dim Failures = IDs.Where(Function(w) w <= 0).Count
    11. For Each Value In IDs
    12. 'DoStuff
    13. Next
    14. Return New Tuple(Of Integer, Integer, Boolean)(Inserts, Updates, Failures > 0)
    15. End Function


    Sicher könnte ich für den Rückgabewert aus

    Quellcode

    1. ​DoStuff
    auch eine Klasse erstellen, aber solche Kleinigkeiten tuts ein Tuple doch auch, oder?

    Bei Microsofts Beispiel lassen sich die Rückgabewerte benennen, bei meinem - soweit ich es bisher weiß- nicht.

    Was meint ihr dazu, eignen sich Tuples für so etwas oder verwendet ihr sie gar nicht?

    Grüße :)
    Ich verwende sie wenig, vor allem, wenn mehrere Rückgabewerte nur einmal verarbeitet oder weitergegeben werden. Im Laufe der Entwicklung stelle ich dann aber auf eigene Klassen um, weil die Daten doch länger gebraucht oder mehrfach wietergegeben werden müssen.
    As (Success As Boolean, Number As Integer) - Variante mit Benennung
    As Tuple(Of Integer, Integer, Boolean) - Variante, bei der eine Benennung nicht möglich ist
    Wenn, dann verwende ich die Tuple-Klasse nicht, sondern die Klammervariante, also die erste.

    ##########

    @BlueLagoonX: Ach ja, ich vergaß. Du musst dann am Ende Deiner Function schreiben:

    VB.NET-Quellcode

    1. Return (Inserts, Updates, Failures > 0)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    BlueLagoonX schrieb:

    Bei Microsofts Beispiel lassen sich die Rückgabewerte benennen, bei meinem - soweit ich es bisher weiß- nicht.
    Was meint ihr dazu, eignen sich Tuples für so etwas oder verwendet ihr sie gar nicht?
    Microsoft bezieht sich auf FW7.0 und höher.
    Jo, die bisherigen Tuples sind recht lausig zu becoden, aber die neuen, die ValueTuples - die sind glaub ziemlich edel.
    Kenne ich aber kaum, weil auf Arbeit gammeln wir noch auf FW4.6 rum.