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