vergleichbares Integer.NaN, wie bei Double.NaN

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    vergleichbares Integer.NaN, wie bei Double.NaN

    Moin!

    auch auf die Gefahr hin, dass ich es schon einmal gefragt habe (in der Suche nicht gefunden!) - ich möchte bei einer Funktion ein Nichts zurückgeben, wo ansosten ein Intger zurückgegeben wird. Aber was zurückgeben, wenn ein Fehler aufgetreten ist.

    Bei Double mache ich das mit Double.NaN wie im Beispiel:

    VB.NET-Quellcode

    1. Public Function GetFeatureAttributAsDouble(ByVal Feature As Autodesk.Map.IM.Data.Feature, ByVal Attribut As String, Optional ByRef Log As EBL.Service.Log = Nothing) As Double
    2. Dim Rückgabewert As String = GetFeatureAttribut(Feature, Attribut, "", Genauigkeit.Zeichen)
    3. Dim Result As Double = Double.NaN
    4. If Not Double.TryParse(Rückgabewert, Result) Then
    5. If Not IsNothing(Log) Then Log.Write("GetFeatureAttributAsDouble:= kein Double-Wert gefunden!")
    6. Return Double.NaN
    7. End If
    8. Return Result
    9. End Function


    Bei Integer habe ich nichts entsprechendes gefunden - kann mir einer von Euch weiterhelfen?

    Gruß Jan
    Nullable halte ich nicht für nötig. Das ist auch nicht C, sodass Du hier einen Rückgabewert für Fehler veranschlagen musst. Werfe einfach eine Exception. Das ist der normale Weg dafür.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    Das ist der normale Weg dafür.
    Ein möglicher Weg.
    @jan99 Warum willst Du zwei Mal testen, ob der Wert valid ist?
    Wenn Du weißt, dass er invalid ist, kannst Du ihn auch einfach mit einem Default-Wert belegen, das war schon bei den INI-Dateien so.
    In was für einem Kontext fehlen denn da Werte?
    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!
    Moin!

    erst einmal danke an alle.

    RushDen schrieb:

    Entweder Exception werfen oder Nullable<Integer> nehmen


    Das verstehe ich leider nicht ganz - kannst Du mir 1-2 Zeilen mit einem Beispiel geben?

    @RodFromGermany:
    Warum willst Du zwei Mal testen, ob der Wert valid ist?


    Bei einigen Funktionen habe ich das auch gemacht. Aber was machst Du, wenn Du wissen willst, ob es überhaupt einen Wert gibt und davon den weiteren Weg beschreibten willst.

    Es gibt bei uns sogenannte FeatureID's (FID) die sind immer größer gleich 0 - da habe ich das dann mit -1 gelöst.

    Aber in anderen Situationen kann es alles geben im negativen, wie auch positiven Zahlenbereich und 0, aber auch gar nichts - wenn nicht definiert.

    ... und dann ?

    Gruß Jan

    jan99 schrieb:

    Aber was machst Du, wenn Du wissen willst, ob es überhaupt einen Wert gibt
    Dann frage einfach ab, ob es ihn gibt.
    Return True oder False identisch zu .TryParse().
    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!
    Scheinbar geht es hier darum, Fehler zu protokollieren. Hierfür wurde eine Methode geschrieben die bei Fehlern einen Log Eintrag schreibt und eine Rückmeldung gibt, ob der Wert valide ist oder eben nicht. @jan99 vielleicht gibst du ein Tuple(Of Double, Boolean) aus der Methode zurück.
    msdn.microsoft.com/de-de/library/system.tuple(v=vs.110).aspx

    Double ist der Wert der Konvertiert wurde, dieser hat den Wert 0 wenn ein Fehler auftrat, ansonsten halt den korrekten Wert. Der Boolean gibt an, ob die Konvertierung erfolgreich war. Prüfen ob die Konvertierung erfolgreich war, musst du aber trotzdem.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen