Wenn Sie beim nächsten Beispiel aussehen:Warum C# lokale Variable sollte direkt zugewiesen werden, auch wenn es Standardwert ist?
public void TestLocalValuesAssignment()
{
int valueVariable; // = default(int) suits fine
string refType; // null suits fine as well
try
{
valueVariable = 5;
refType = "test";
}
catch (Exception){}
Console.WriteLine("int value is {0}", valueVariable);
Console.WriteLine("String is {0}", refType);
}
Sie leicht erkennen können, dass Variablen valueVariable
und refType
vor ihrer Verwendung in Console.WriteLine()
nicht zugeordnet werden können. Compiler sagt uns darüber mit Fehlern:
Error 1 Use of unassigned local variable 'valueVariable'
Error 2 Use of unassigned local variable 'refType'
Dies ist ein weit verbreiteter Fall und es gibt loads of answers auf, wie die (mögliche Korrekturen kommentiert) zu beheben.
Was kann ich nicht verstehen, warum ein solches Verhalten existiert? Wie unterscheiden sich hier lokale Variablen von Klassenfeldern, wobei die letzten Standardwerte erhalten, wenn sie nicht zugewiesen sind (Null für Referenztypen und korrespondierender Standardwert für Werttypen)? Vielleicht gibt es ein Beispiel oder einen Eckfall, der erklärt, warum ein solches Compiler-Verhalten gewählt wird?
möglich Duplikat [Initialisierung der Instanzfelder gegen lokale Variablen] (http://stackoverflow.com/questions/1542824/initialization-of-instance-fields-vs-local-variables) –
Es ist nicht „Verhalten“ Es ist * Regel *. Die eindeutige Zuordnungsregel besagt, dass eine Variable * vor der Verwendung zugewiesen werden muss. Natürlich wird es nicht in Ihrem Code-Snippet sein, wenn eine Ausnahme ausgelöst wird. Ja, kann passieren. –
@TimSchmelter Stimme absolut zu, es ist ein Duplikat. [John Skeet lieferte] (http://stackoverflow.com/a/1542851/472020) ziemlich vernünftige Erklärung, die als eine Antwort auf meine Frage betrachtet werden könnte. – Antonio