896 Stimmen

Alle möglichen Array-Initialisierungssyntaxen

Was sind alle Array-Initialisierungssyntaxen, die mit C# möglich sind?

976voto

Anthony Pegram Punkte 119149

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

474voto

Eric Lippert Punkte 628543

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

132voto

kiss my armpit Punkte 3293

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 Sie int[] data5 = { 1, 2, 3 } stattdessen.

Leere Arrays

  • var data6 = new int[0]

  • var data7 = new int[] { }

  • var data8 = new [] { } y int[] data9 = new [] { } sind nicht kompilierbar.

  • var data10 = { } ist nicht kompilierbar. Verwenden Sie int[] 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 kompilierbar
  • Foo(new int[0])
  • Foo(new int[] { })
  • Foo({}) ist nicht kompilierbar

61voto

Atomosk Punkte 1793
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.

27voto

Nahid Camalli Punkte 251
var contacts = new[]
{
    new 
    {
        Name = " Eugene Zabokritski",
        PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
    },
    new 
    {
        Name = " Hanying Feng",
        PhoneNumbers = new[] { "650-555-0199" }
    }
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X