Fehlerbehebung durch Option strict

  • VB.NET
  • .NET 5–6

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Typhoon.

    Fehlerbehebung durch Option strict

    Hallo liebes Forum

    Ich bräuchte wiedereinmal eure Hilfe.

    Checkbox Häkchen anzeigen ob gewählt oder nicht.

    Mit folgendem Code Teil wird mir das Checkbox Häkchen angezeigt oder auch nicht, jenachdem was in der DB steht ( 0 oder 1 )

    VB.NET-Quellcode

    1. If dbResultSettings("messungenHideDoubleDateEntries") = True Then druckereimanagerSettings.messungenHideDoubleDateEntries = True Else druckereimanagerSettings.messungenHideDoubleDateEntries = False


    Das funktioniert bei Option Strict OFF tadellos.

    Wähle ich Option Strict ON aus schreit VB mit folgendem Fehler und dbResultSettings("messungenHideDoubleDateEntries") ist mit einer roten Wellenlinie unterschrichen.

    "Option Strict ON" lässt Operanden des Typs "Object" für den =-Operator nicht zu. Verwenden Sie den Is-Operator, wenn Sie die Objektidentität testen möchten.

    Ändere ich den Code ab und mache aus dem "=" ein "Is" schreit VB wieder und das Wort "True" ist rot unterstrichen.

    VB.NET-Quellcode

    1. If dbResultSettings("messungenHideDoubleDateEntries") Is True Then druckereimanagerSettings.messungenHideDoubleDateEntries = True Else druckereimanagerSettings.messungenHideDoubleDateEntries = False


    Der Is-operator akzeptiert keine Operanden vom Typ "Boolean". Die Operanden müssen Referenztypen sein oder Typen, die NULL-Werte zulassen.

    Nun weiß ich nicht mehr weiter. Ist doch nur ein " 0 oder 1 " 0 bedeutet keine Häkchen 1 bedeutet ein Häkchen? Boolen ist doch " Ture oder False"

    Grüße Gebhard

    die Farbe Rot ist der Moderation vorbehalten und wurde ersetzt ~VaporiZed

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

    dbResultSettings("messungenHideDoubleDateEntries") gibt laut Fehlermeldung ein Object zurück. Dass das nur 0 oder 1 sein kann, ist da erstmal unerheblich, denn das kann Dein Programm ja nicht wissen. Vor allem: ist es 0/1 oder vielleicht "0"/"1"? Also Integer oder String? Was immer es ist, teile es Deinem Programm mit, indem Du z.B. schreibst CInt(dbResultSettings("messungenHideDoubleDateEntries")) (für: in der DB sind Integer-Werte) oder dbResultSettings("messungenHideDoubleDateEntries").ToString (für: in der DB sind String-Werte)

    In VB.NET ist aber 1 und 0 was anderes als True und False. In anderen Sprachen vielleicht nicht, aber in VB.NET wird da sehr strikt unterschieden.

    Aber: Boolean-Vergleiche mit True sind überflüssig.
    Daher:

    VB.NET-Quellcode

    1. druckereimanagerSettings.messungenHideDoubleDateEntries = (CInt(dbResultSettings("messungenHideDoubleDateEntries")) = 1)

    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 2 mal editiert, zuletzt von „VaporiZed“ ()

    Hallo VaporiZed

    Danke für deinen Tip und die Erklärung.

    So funktioniert es auch mit "OPTION STRICT ON"

    VB.NET-Quellcode

    1. If CBool(dbResultSettings("messungenHideDoubleDateEntries").ToString) = True Then druckereimanagerSettings.messungenHideDoubleDateEntries = True Else druckereimanagerSettings.messungenHideDoubleDateEntries = False


    Jetzt wird es richtig angezeigt. Steht in der DB unter messungenHideDoubleDateEntries eine "0" ist kein Hacken in der Checkbox
    Steht eine "1" ist auch der Hacken gesetzt.

    Danke
    @Typhoon @VaporiZed hat Dich doch bereeits auf diesen Thread hingewiesen: Boolean, Vergleiche und bedingte Verzweigungen
    Machst Du einfach:

    VB.NET-Quellcode

    1. druckereimanagerSettings.messungenHideDoubleDateEntries = Convert.ToBoolean(dbResultSettings("messungenHideDoubleDateEntries"))
    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!