Variable wird verwendet, bevor ihr ein Wert zugewiesen wird

  • VB.NET

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

    Variable wird verwendet, bevor ihr ein Wert zugewiesen wird

    Hi,

    folgender Code verursacht in Zeile 8 die im Titel stehende Warnmeldung:

    VB.NET-Quellcode

    1. Dim matchingPlugin As ImportPlugin
    2. For Each imPL As ImportPlugin In PluginManager.importPlugins
    3. If imPL.Name = fcgDr.ModuleName Then
    4. matchingPlugin = imPL
    5. Exit For
    6. End If
    7. Next
    8. If matchingPlugin Is Nothing Then
    9. Debug.WriteLine("no matching plugin found")
    10. Return 0
    11. End If


    Nun behandle ich ja genau den gewarnten Fall und verlasse die Funktion, wenn kein Wert zugewiesen werden konnte. Beide Fälle funktionieren Problemlos zur Laufzeit. Wenn kein Plugin gefunden wurde, wird 0 zurückgegeben, ansonsten läuft die Funktion weiter. Trotzdem geht diese dämliche Meldung nicht weg. Hab ich was übersehen?

    PS:

    VB.NET-Quellcode

    1. If IsNothing(matchingPlugin) Then
    2. Return 0
    3. End If

    Verursacht genau die gleiche Meldung ||

    PS2: Ich kann auch nicht einfach

    VB.NET-Quellcode

    1. new ImportPlugin
    verwenden, da es sich um eine Schnittstelle handelt.

    Option strict = on

    If it's stupid and it works it ain't stupid.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Nils_Kr“ ()

    Ja, ist nur ne Warnmeldung, aber deshalb nicht minder nervig. Mit = nothing geht die Warnung tatsächlich weg.

    Aber ist das nicht total sinnfrei? Nothing ist sowieso das Default value und auf die nullReferenceException hat es auch kein Einfluss. Dim matchingPlugin As ImportPlugin = Nothing & Dim matchingPlugin As ImportPlugin lassen beide das Programm crashen, wenn sie aufgerufen werden.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    Nils_Kr schrieb:

    Aber ist das nicht total sinnfrei?
    Nein.
    Einmal ist das "nur" eine Warnung, zum anderen hat der Compiler (mindestens) einen Weg von der Deklaration bis zur Verwendung der Variable entdeckt, ohne dass ihr ein Wert zugewiesen wurde.
    Dass das bei Dir und meist auch anderswo Nothing bzw. null ist, ist unerheblich.
    Wenn da aber was drinstehen musst, wirst Du bereits zur Compile-Zeit darauf aufmerksam gemacht. 8o
    Die Variable muss ja keinen Reference-Typ beherbergen, sondern z.B. ein Integer, dass größer als 1000 sein muss.
    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!
    Es geht darum, dass man durch die Warnung darauf hingewiesen wird, dass der Variable noch nix zugeordnet ist. Im Sinne von: "Achtung, da ist noch eine möglicherweise problematische Zeile. Nicht, dass Du die vergisst oder übersiehst." Wenn Du aber explizit Nothing zuweist, dann machst Du dem System klar: "Hey, ich hab die Zeile bemerkt und mich drum gekümmert. Ich weiß, dass da anfangs Nothing drin steckt. Das ist von mir beabsichtigt."
    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.