OptionStrict=On Problems

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    OptionStrict=On Problems

    Hi,

    mhh, ich hoffe, ich bin nicht gar zu unverschämt ... aber ich habe noch ein paar Probleme mit "OptionStrict=On" ...

    VB.NET-Quellcode

    1. Do While (GetNetEnabled() <> IIf((strOperation.Trim = "Enable"),
    2. EnumNetEnabledStatus.Enabled,
    3. EnumNetEnabledStatus.Disabled))


    Das liefert mir die Fehlermeldung:

    "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.

    Die Funktion GetNetEnabled ist wie folgt definiert

    VB.NET-Quellcode

    1. Public Function GetNetEnabled() As Integer


    Die Enumeration sieht wie folgt aus:

    VB.NET-Quellcode

    1. Private Enum EnumNetEnabledStatus As Integer
    2. Disabled = -1
    3. Enabled = 1
    4. Unknow = 0
    5. End Enum


    Auf beiden Seiten steht ein "Integer" ... was ist denn nun falsch an der Kiste ? Ohne Option Strict=On läuft das sogar ohne Probleme ... aber das will ja nix heißen !

    LG
    Peter

    KaskadekingDE schrieb:

    Statt IIf If benutzen. Denn IIf gibt ein Object zurück.


    Das war's ! Na jetzt verstehe ich das ! Auf die Idee muss man ja erst einmal kommen !

    Statt IIF(,,) wär If(,,) zu nehmen. Steht glaub auch auf Böse Funktionen vermeiden


    Ok ... das IIF habe ich jetzt aus dem Microsoft Sample neu kennengelernt. Und mich gefreut, was das für eine elegante Syntax ermöglicht. Und jetzt erfahre ich, dass es sich um "bösen" Code handelt. Mein Weltbild bezüglich Microsoft ist zutiefst erschüttert.

    Spaß beiseite ... ich hab den "IIf" Quatsch jetzt entfernt .... und schon läuft die Sache!

    Danke für eure unendliche Geduld und Nachsicht! :)

    LG
    Peter

    ErfinderDesRades schrieb:

    nicht (nur) den IIF-Quatsch entfernen, sondern vor allem den Deppen-Namespace musste rauswerfen!


    Also, jetzt würde ich gern ein für allemal verstehen, wie ich das richtig mache:

    Option Strict=ON

    ist kein Thema. Wird ohne wenn und aber gemacht. Das ist insbesondere notwendig um "typensicher" zu programmieren.

    Wie steht es jetzt aber um den "Deppen-Namespace". Wenn ich es richtig verstehe geht es um

    Imports Microsoft.Visual Basic

    Das kann man in den Vorlagen abklemmen. Damit sind neue Projekte "sauber"

    Nun hab ich aber ein Projekt von irgendwoher kopiert. Und da ist dieser Namespace natürlich enthalten. Wie bereinige ich denn das jetzt ?

    Wenn ich das richtig verstanden habe, ist damit die Anweisung "IIf" automatisch auch nicht mehr möglich?

    LG
    Peter

    Peter329 schrieb:

    Und da ist dieser Namespace natürlich enthalten. Wie bereinige ich denn das jetzt ?
    Als "Natürlich" würde ich das lieber nicht bezeichnen. Aber leider ists oft so.
    Ist in den Vids nicht gezeigt, wie man in den ProjektEinstellungen den GeneralImport des DNS (Deppen-Namespace) deaktiviert? Im Reiter "Verweise"?

    Genau - das dumme IIF ist dann nicht mehr so ohne weiteres möglich. Aber - nun wird es dir explizit zum 3. Mal mitgeteilt (und implizit zum 4. Mal): Nimm doch IF(,,) stattdessen.
    Gibt es damit iein Problem? Wenn ja, warum versuchst du es nicht zu benennen?

    Du weißt doch (oder wusstest du es nicht?), dasses mich recht schnell ankäst, wenn wichtige Hinweise ohne jedes Echo ignoriert werden. Ich neige dann dazu, einen größeren SchriftType zu verwenden, um doch noch iwie die gebotene Aufmerksamkeit herzustellen, aber dann erscheine ich unfreundlich.
    Also:
    Statt IIF(,,) nimm If(,,)!!, und alles wird gut.

    ErfinderDesRades schrieb:

    Du weißt doch (oder wusstest du es nicht?), dasses mich recht schnell ankäst, wenn wichtige Hinweise ohne jedes Echo ignoriert werden.


    Doch, doch ... das ist mir gelegentlich schon aufgefallen, dass du mitunter ein bissl dogmatisch wirst, wenn man deine gut gemeinten Ratschlägen nicht augenblicklich umsetzt und verinnerlicht. Unbotmäßigkeit wird nicht geduldet! :)

    Na, in diesem Fall hast du ja auch Recht ... und deshalb - und um allen anderen solch herbe Schelte zu ersparen, wie sie mir des öfteren widerfährt - der klare Rat:

    Projekt - Verweise - Importierte Namespaces - Microsoft.VisualBasic - Häkchen OFF !

    Und schon isses vorbei mit der bösen alten Welt. Und EDR kann wieder lächeln. :)

    Jetzt hab ich es auch geschnallt ... Danke noch mal, für eure Geduld und gelegentliche Nachsicht ! Ihr habt meinen Tag gerettet, denn meine Anwendungen laufen jetzt so, wie ich mir das vorgestellt habe !

    LG
    Peter

    Peter329 schrieb:

    Unbotmäßigkeit wird nicht geduldet!
    Jo, so kommt das dann leider immer rüber

    Aber was man

    Peter329 schrieb:

    nicht augenblicklich umsetzt...
    setzt man zu 95% überhaupt niemals um.

    Wobei die Umsetzerei nicht der Punkt ist, sondern das Ignorieren, dassich ühaupt was gesagt habe.
    Wenn du sagst "If(,,) will ich nicht, entweder IIf(,,) oder garnet, und warum, bleibt mein Geheimnis", dann ist ja ok, dann mussich das nicht eins ums andere Mal wiederholen.