in C #, warum sehe ich eine Null in meiner int-Variablen gespeichert, wenn ich es deklariere, aber immer noch eine Fehlermeldung, dass ich es initialisieren sollte?

8

in C #, wenn ich etwas mache wie:

%Vor%

drücke dann F10, ich sehe, dass in x eine Null gespeichert ist.

aber wenn ich versuche, x zu verwenden, sagt es mir, dass ich es initialisieren soll .. Warum das ? dort soll es eine Null sein, oder?

Das Gleiche gilt auch für Arrays, also:

%Vor%

Wenn wir F10 haben, werden wir sehen, dass alle darin enthaltenen Nullen sind ..

Was ist los? und warum sollte ich jemals eine Variable in C # im Gegensatz zu C ++ initialisieren müssen?

    
vexe 13.07.2012, 00:31
quelle

5 Antworten

7

Es ist ein Kompilierungsfehler, der Ihnen hilft, Fehler in Ihrem Code aufgrund von nicht initialisierten Variablen zu reduzieren. Sehr nützlich.

Ссылка

Mehr lesen:

Ссылка

Einige Wörter zum Deaktivieren des Fehlers (Sie können Sie nicht nur warnen - es ist keine Warnung):

Ссылка

und

Ссылка (erweist sich als am informativsten zu dem Thema)

und sogar mehr über die Beziehung zwischen "localsinit" IL-Flagge (dass erzwingt das Setzen von Standardwerten für Locals) und seine Beziehung zu "double assignment" (C # zwingt Sie, int v=0 zu schreiben, selbst wenn es bereits vorhanden ist). Und wenn Sie noch tiefer lesen möchten - "localingsinit" definiert in Abschnitt I.12.2 von ECMA-335 hier verfügbar .

    
Daniel Mošmondor 13.07.2012, 00:34
quelle
4

Einfach ausgedrückt, denn so funktioniert C #. Aus der C # -Sprachspezifikation:

  

5.3.2 Anfangs nicht zugewiesene Variablen

     

Die folgenden Kategorien von Variablen werden als anfänglich nicht zugewiesen klassifiziert:

     

· Instanzvariablen von ursprünglich nicht zugewiesenen Strukturvariablen.

     

· Ausgabeparameter einschließlich der this-Variablen der Konstruktorinstanzkonstruktoren.

     

· Lokale Variablen, außer den in einer catch-Klausel oder einer foreach-Anweisung deklarierten.

Auf der anderen Seite:

  

5.3.1 Anfangs zugewiesene Variablen

     

Die folgenden Kategorien von Variablen werden als ursprünglich zugewiesen klassifiziert:

     

· Statische Variablen.

     

· Instanzvariablen von Klasseninstanzen.

     

· Instanzvariablen der initial zugewiesenen Strukturvariablen.

     

· Array-Elemente.

     

· Wertparameter.

     

· Referenzparameter.

     

· Variablen, die in einer catch-Klausel oder einer foreach-Anweisung deklariert sind.

    
Christopher Berman 13.07.2012 00:37
quelle
3

Einfach ... weil der Compiler darauf besteht, dass Sie lokale Variablen initialisieren, bevor Sie sie verwenden. Dies verhindert eine ganze Kategorie von Fehlern, die mit dem Fehlschlagen der Initialisierung verbunden sind.

Wenn Sie sich die IL ansehen, die aus den folgenden wenigen Aussagen generiert wurde:

%Vor%

Sie sehen Folgendes:

%Vor%

Wenn Sie vor dem Speichern in IL einen Wert für x sehen, handelt es sich um einen Debuggertrick.

    
spender 13.07.2012 00:34
quelle
2

Es ist nur Glück, es könnte alles sein, deshalb müssen Sie es initialisieren.

    
Hogan 13.07.2012 00:34
quelle
2

Die automatische Initialisierung ist eine Laufzeit-Sicherheitsfunktion, glaube ich, keine Sprachgarantie. Es passiert, dass .NET Nullen Variablen, aber das muss nicht mit jedem Framework wahr sein.

Beachten Sie, dass für Arrays garantiert ist.

    
Mehrdad 13.07.2012 00:36
quelle

Tags und Links