Frage

Ohne Initialisierung, wie ist es möglich, Werte zuweisen auf Arrays?

string[] s={"all","in","all"};

I mean why did not the compile show error?.Normally we need to 
initialize ,before assign values.
War es hilfreich?

Lösung

Es ist nur syntaktischer Zucker.

Dieses:

string[] s = {"all","in","all"};

ist mit dem gleichen Code kompiliert wie:

string[] tmp = new string[3];
tmp[0] = "all";
tmp[1] = "in";
tmp[2] = "all";
string[] s = tmp;

Beachten Sie, dass die Array-Referenz nicht zugeordnet ist s, bis alle Elemente zugeordnet wurden. Das ist nicht wichtig, in diesem speziellen Fall, in dem wir erklären, ein neue Variable, aber es wäre eine andere in dieser Situation zu machen:

string[] s = { "first", "second" };
s = new string[] { s[1], s[0] };

Das gleiche gilt für die Objekt- und Auflistungsinitialisierer - die Variable erst am Ende zugeordnet ist

.

Andere Tipps

Es ist möglich, ein Array-Variable ohne Initialisierung zu erklären.

Check this out http://msdn.microsoft.com/en- us / library / 0a7fscd0% 28VS.71% 29.aspx

Sie sind nicht „Wert Array zuweisen“. Sie sind eine Variable vom Typ „Referenz auf Array“ zu initialisieren. Der Wert, mit dem initialisieren Sie es sich um eine Referenz auf ein Array ist, die durch die Verwendung von kurzen Arrayinitialisierungssyntax {...} erstellt wurde. Während es nur zulässig, in Initialisierer von Variablen des Array-Typs ist, es ist genau äquivalent zu new T[] { ... }, wo T vom Variablentyp abgeleitet wird.

Ich glaube, Sie wissen wollen, warum

 string[] s={"all","in","all"};

funktioniert, wenn Sie es erwarten würden erforderlich, um das Array zu initialisieren, zuerst wie folgt aus:

string[] s = new string[];

oder

string[] s = new string[] {"all","in","all"};

Die Antwort ist einfach Compiler Magie. Der Compiler weiß auf der Initialisierung basiert, wie groß das Array so es tut es nur hinter den Kulissen für Sie. Ähnlich wie die var Schlüsselwort, ist der Punkt, um die Menge der redundanten Informationen, die Sie eingeben erforderlich sind, zu begrenzen.

Der {"all","in","all"} Teil ist die Initialisierung. kann der new string[] Teil weggelassen werden, da die geschweiften Klammern und String-Notation kurzer Hand sind. Schauen Sie sich auf MSDN auf eindimensionales Arrays.

string[] s = new string[] { "all","in","all"};

und seine Kurzschreibweise

string[] s = {"all","in","all"};

sind die gleiche Sache. Siehe MSDN (Initialisierung von Arrays Abschnitt) für mehr Detail.

Sie müssen nicht den neuen String [] Teil in C # 3 oder höher - das funktioniert gut

string[] s = { "all","in","all"};

Es ist nur ein Fall des Compilers ein bisschen intelligenten und Ausarbeiten zu sein, was Sie meinen - das hintere Ende IL wird das gleiche sein

.

Sie können so einfach tun, weil es erlaubt ist, dabei in zwei Schritten ist nicht erforderlich, so dass dies die Stenografie ist. Betrachten Sie es als Zucker.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top