Frage zu Nullable im Rahmen von Integer als Rückgabewert einer Funktion

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Frage zu Nullable im Rahmen von Integer als Rückgabewert einer Funktion

    Moin!

    ich habe Funktionen die aus einer Anwendung Datenauslesen - zum Beispiel Integer-Werte.

    Nun wird eine Funktion aufgerufen die diese Daten auslesen soll und wenn da ein Wert rauskommt, dann kann dieser größer, kleiner oder gleich 0 sein.

    Aber was gebe ich zurück, wenn es bei der Datenermittlung zum Beispiel zu einem Fehler gekommen ist?

    Irgendwo habe ich einmal gehört, dass es da so etwas wie Nullable geben soll. Eine Art wirklich "nichts"!

    Im Web bin ich aber irgendwie noch nicht so ganz damit klar gekommen um es zu verstehen.

    Nach meinem bisherigen Verständnis könnte das ganze so aussehen - die fraglichen Rückgaben habe ich mit NICHTS bezeichnet:

    VB.NET-Quellcode

    1. Public Function GetDialogAttributAsLong(ByVal Dialog As Autodesk.Map.IM.Forms.Dialog, ByVal Name As String, ByVal DefaultValue As Long) As Long
    2. If IsNothing(Dialog) Then
    3. MsgBox("Dialog nicht definiert!")
    4. Return NICHTS
    5. End If
    6. Try
    7. If Dialog.Controls.Contains(Name) Then
    8. If Dialog.Controls.Item(Name).Value.Length = 0 Then
    9. Return DefaultValue
    10. Else
    11. Return CType(Dialog.Controls.Item(Name).Value, Long)
    12. End If
    13. End If 'Contains
    14. Catch ex As Exception
    15. _TryReport.Show("unerwarteter Fehler in " & ErrInfo, ex)
    16. Return NICHTS
    17. End Try
    18. Return NICHTS
    19. End Function


    Wenn die Funktion nun einen Wert zurück bekommt, dann muss ja auch geprüft werden, ob eventuell dieser Fehlerwert NICHTS zurück gekommen ist.

    Kann mir einer weiterhelfen - vielleicht mit einem kleinen Beispiel?

    Gruß Jan
    Anstatt Long lässt du die Function Long? zurückgeben Das ist kurz für Nullable(Of Long). Dadurch kannst du jeden beliebigen Zahlenwert, oder aber auch Nothing zurückgeben.
    Code der diese Funktion aufruft sollte natürlich die .HasValue Property des Return-Wertes prüfen, bevor auf den eigentlich Wert zugegriffen wird.
    Moin!

    erst einmal Danke - aber was schreibe ich für NICHTS?

    Müsste dann die erste Zeile wie folgt lauten:

    VB.NET-Quellcode

    1. Public Function GetDialogAttributAsLong(ByVal Dialog As Autodesk.Map.IM.Forms.Dialog, ByVal Name As String, ByVal DefaultValue As Long) As Long?


    Gruß Jan

    jan99 schrieb:

    aber was schreibe ich für NICHTS?
    Steht doch alles im Post von @EaranMaleasi ;)

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Ausgabe(DoIt(0))
    3. Ausgabe(DoIt(1))
    4. End Sub
    5. Private Sub Ausgabe(val As Integer?)
    6. If val.HasValue Then
    7. Me.ListBox1.Items.Add(val.Value)
    8. Else
    9. Me.ListBox1.Items.Add("Nix")
    10. End If
    11. End Sub
    12. Private Function DoIt(value As Integer) As Integer?
    13. If value = 0 Then
    14. Return Nothing
    15. End If
    16. Return value
    17. End Function
    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!