Welche Syntaxen für die Array-Initialisierung sind mit C # möglich?
quelle
Welche Syntaxen für die Array-Initialisierung sind mit C # möglich?
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 andere Techniken zum Abrufen von Arrays vorhanden sind, z. B. die Linq- ToArray()
Erweiterungen für IEnumerable<T>
.
Beachten Sie auch, dass in den obigen Erklärungen die ersten beiden string[]
die links durch var
(C # 3+) ersetzen könnten , da die Informationen auf der rechten Seite ausreichen, um auf den richtigen Typ zu schließen. 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. Der vierte könnte auch Inferenz verwenden. Wenn Sie sich also für die ganze Kürze interessieren, könnte das Obige 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
var
Variablen zugewiesen werden kann?var x = {}
dies nicht funktioniert, wenn der Array-Initialisierer etwas anderes als Arrays liefern könnte, aber ich würde nicht wissen, was das ist. Ich denke, der Array-Initialisierer ist eine Sprachfunktion. Wenn Sie esnew List<string> {"A", "B"}
damit verwenden, ergibt sich auch etwas anderes.Die Syntaxen zur Array-Erstellung in C #, die Ausdrücke sind, sind:
Im ersten Fall kann die Größe ein beliebiger nicht negativer Integralwert sein, und die Array-Elemente werden auf die Standardwerte initialisiert.
Im zweiten Fall muss die Größe konstant 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 aus der Anzahl der angegebenen Elemente bestimmt.
Im vierten wird der Typ des Array-Elements abgeleitet, indem der beste Typ aller gegebenen Elemente mit Typen berechnet wird, falls es einen gibt. Alle Elemente müssen implizit in diesen Typ konvertierbar sein. Die Größe wird aus der Anzahl der angegebenen Elemente bestimmt. Diese Syntax wurde in C # 3.0 eingeführt.
Es gibt auch eine Syntax, die nur in einer Deklaration verwendet werden darf:
Die Elemente müssen implizit in den Elementtyp konvertierbar sein. Die Größe wird aus der Anzahl der angegebenen Elemente bestimmt.
Ich verweise Sie auf die C # 4.0-Spezifikation, Abschnitt 7.6.10.4 "Ausdrücke zur Array-Erstellung".
quelle
Array.CreateInstance(typeof(int), 3)
!"1,2,3,4".split(',')
.new int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };
, und so weiter fürint[,,]
,int[,,,]
, ...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 [] { }
undint[] data9 = new [] { }
sind nicht kompilierbar.var data10 = { }
ist nicht kompilierbar. Verwenden Sieint[] data11 = { }
stattdessen.Als Argument einer Methode
Nur Ausdrücke, die mit dem
var
Schlüsselwort zugewiesen werden können, können als Argumente übergeben werden.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 kompilierbarquelle
Erstellt ein Array von leeren Zeichenfolgen, die wiederholt gezählt werden. Für den Fall, dass Sie ein Array mit demselben, jedoch speziellen Standardelementwert initialisieren möchten. Vorsichtig mit Referenztypen verweisen alle Elemente auf dasselbe Objekt.
quelle
var arr1 = Enumerable.Repeat(new object(), 10).ToArray();
Sie erhalten 10 Verweise auf dasselbe Objekt. Um 10 verschiedene Objekte zu erstellen, können Sievar arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();
oder ähnliches verwenden.quelle
Wenn Sie ein festes Array von vorinitialisierten gleichen (nicht
null
oder nicht alsdefault
) Elementen initialisieren möchten, verwenden Sie Folgendes :Bitte nehmen Sie auch an dieser Diskussion teil.
quelle
Beispiel zum Erstellen eines Arrays einer benutzerdefinierten Klasse
Unten ist die Klassendefinition.
So können Sie das Array initialisieren:
quelle
Wiederholen Sie ohne LINQ :
quelle
oder
oder
und in mehrdimensionaler Anordnung
quelle
quelle
Eine andere Möglichkeit, ein Array von Objekten zu erstellen und zu initialisieren. Dies ähnelt dem Beispiel, das @Amol oben veröffentlicht hat , außer dass dieses Konstruktoren verwendet. Ein Schuss Polymorphismus breitete sich aus, ich konnte nicht widerstehen.
Klassen für den Kontext:
quelle
Für die folgende Klasse:
Sie können das Array des obigen Objekts wie folgt initialisieren.
Hoffe das hilft.
quelle
Sie können auch dynamische Arrays erstellen, dh Sie können zuerst die Größe des Arrays vom Benutzer erfragen, bevor Sie es erstellen.
quelle
Triviale Lösung mit Ausdrücken. Beachten Sie, dass Sie mit NewArrayInit nur ein eindimensionales Array erstellen können.
quelle
Nur eine Notiz
Die folgenden Arrays:
Wird zusammengestellt zu:
quelle