Was sind alle Array-Initialisierungssyntaxen, die mit C# möglich sind?
Antworten
Zu viele Anzeigen?Dies sind die aktuellen Deklarations- und Initialisierungsmethoden für ein einfaches Array.
string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
string[] array = new[] { "A", "B" }; // created populated array of length 2
Beachten Sie, dass es auch andere Techniken gibt, um Arrays zu erhalten, wie z. B. die Linq ToArray()
Erweiterungen an IEnumerable<T>
.
Beachten Sie auch, dass in den obigen Deklarationen die ersten beiden die string[]
auf der linken Seite mit var
(C# 3+), da die Informationen auf der rechten Seite ausreichen, um den richtigen Typ zu ermitteln. Die dritte Zeile muss wie angezeigt geschrieben werden, da die Syntax der Array-Initialisierung allein nicht ausreicht, um die Anforderungen des Compilers zu erfüllen. Die vierte Zeile könnte auch die Inferenz verwenden. Wenn Sie also auf die ganze Sache mit der Kürze Wert legen, könnte die obige Zeile wie folgt geschrieben werden
var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
var array = new[] { "A", "B" }; // created populated array of length 2
Die Array-Erstellungssyntaxen in C#, die sind Ausdrücke sind:
new int[3]
new int[3] { 10, 20, 30 }
new int[] { 10, 20, 30 }
new[] { 10, 20, 30 }
Im ersten Fall kann die Größe ein beliebiger nichtnegativer ganzzahliger Wert sein, und die Array-Elemente werden mit den Standardwerten initialisiert.
Im zweiten Fall muss die Größe eine Konstante sein und die Anzahl der angegebenen Elemente muss übereinstimmen. Es muss eine implizite Konvertierung von den angegebenen Elementen in den angegebenen Array-Elementtyp erfolgen.
Im dritten Fall müssen die Elemente implizit in den Elementtyp konvertierbar sein, und die Größe wird anhand der Anzahl der angegebenen Elemente bestimmt.
Im vierten Schritt wird der Typ des Array-Elements abgeleitet, indem der beste Typ, falls vorhanden, von allen gegebenen Elementen, die Typen haben, berechnet wird. Alle Elemente müssen implizit in diesen Typ konvertierbar sein. Die Größe wird aus der Anzahl der gegebenen Elemente bestimmt. Diese Syntax wurde in C# 3.0 eingeführt.
Es gibt auch eine Syntax, die nur in einer Erklärung verwendet werden darf:
int[] x = { 10, 20, 30 };
Die Elemente müssen implizit in den Elementtyp konvertierbar sein. Die Größe wird durch die Anzahl der angegebenen Elemente bestimmt.
es gibt keinen allumfassenden Leitfaden
Ich verweise Sie auf C# 4.0 Spezifikation, Abschnitt 7.6.10.4 "Array Creation Expressions".
Nicht leere Arrays
-
var data0 = new int[3]
-
var data1 = new int[3] { 1, 2, 3 }
-
var data2 = new int[] { 1, 2, 3 }
-
var data3 = new[] { 1, 2, 3 }
-
var data4 = { 1, 2, 3 }
ist nicht kompilierbar. Verwenden Sieint[] data5 = { 1, 2, 3 }
stattdessen.
Leere Arrays
-
var data6 = new int[0]
-
var data7 = new int[] { }
-
var data8 = new [] { }
yint[] data9 = new [] { }
sind nicht kompilierbar. -
var data10 = { }
ist nicht kompilierbar. Verwenden Sieint[] data11 = { }
stattdessen.
Als Argument einer Methode
Nur Ausdrücke, die mit der Option var
Schlüsselwort als Argumente übergeben werden können.
Foo(new int[2])
Foo(new int[2] { 1, 2 })
Foo(new int[] { 1, 2 })
Foo(new[] { 1, 2 })
Foo({ 1, 2 })
ist nicht kompilierbarFoo(new int[0])
Foo(new int[] { })
Foo({})
ist nicht kompilierbar
Enumerable.Repeat(String.Empty, count).ToArray()
Erstellt ein Array mit leeren Strings, die 'count' mal wiederholt werden. Für den Fall, dass Sie das Array mit dem gleichen, aber speziellen Standard-Elementwert initialisieren wollen. Vorsicht bei Referenztypen, alle Elemente verweisen auf dasselbe Objekt.
- See previous answers
- Weitere Antworten anzeigen