C # deklariert leeres String-Array

152

Ich muss ein leeres String-Array deklarieren und verwende diesen Code

string[] arr = new String[0]();

Aber ich bekomme den Fehler "Methodenname erwartet".

Was ist los mit dir?

Aquanat
quelle
2
Warum brauchen Sie ein leeres Array? Was versuchst du zu machen?
Herr T.
7
@ MrT. nicht wirklich relevant für die Frage.
James
1
@ James - vielleicht gibt es eine elegantere Möglichkeit, alles zu tun, was er versucht.
Herr T.
4
@aquanat - Obwohl eine Antwort bereits akzeptiert wurde und ich Ihren Code oder die Logik dahinter nicht kenne, würde ich Ihnen demütig empfehlen, kein leeres Array, sondern null zurückzugeben und von der aufrufenden Funktion zu prüfen, ob der zurückgegebene Wert null oder ist nicht. Ich denke, dass es viel eleganter, lesbarer und effizienter wäre.
Herr T.
2
Der Grund, warum Sie null nicht zurückgeben möchten, ist, dass der Konsument der Methode nach null suchen muss. Beispielsweise könnte der Konsument der Methode den zurückgegebenen Wert in ein foreach einfügen, und wenn ein leeres Array zurückgegeben wird, gibt es kein Problem. Wenn jedoch null zurückgegeben wird, muss vor dem Iterieren des zurückgegebenen Werts eine Überprüfung auf null durchgeführt werden
JAB

Antworten:

264

Versuche dies

string[] arr = new string[] {};
Atish Dipongkor - MVP
quelle
1
Vielen Dank an alle ... frag mich nicht warum, aber der einzige Weg war: string [] arr = new String [0] as string [];
Aquanat
2
Atishs Methode hat funktioniert und die Beschwerde von Visual Studio über die Verwendung einer Variablen beseitigt, die nicht initialisiert wird, wenn ich sie in einer if-Anweisung zuweise
Joe
1
Andere Option istc# Array.Empty<string>()
Jannick Breunis
68

Ihre Syntax ist falsch:

string[] arr = new string[]{};

oder

string[] arr = new string[0];
Andrei
quelle
1
Warum wird in Ihren Beispielen Zeichenfolge sowohl aktiviert als auch nicht aktiviert?
wahr.
1
@newStackExchangeInstance, kopierte einfach den Code "wie er ist" aus der Frage. Beide Zeilen lassen sich gut kompilieren, obwohl ich der Meinung bin, dass es besser ist, einem Stil zu folgen.
Andrei
15

Wenn Sie .net 4.6 verwenden, haben sie eine neue Syntax, die Sie verwenden können:

using System;  // To pick up definition of the Array class.

var myArray = Array.Empty<string>();
Brian
quelle
Guter Trick! Und es funktioniert auch mit IList <T>: IList <string> x = Array.Empty <string> ();
ZunTzu
9

Sie können dies versuchen

string[] arr = {};
Bharadwaj
quelle
8

Die Konstruktoren von Arrays sind unterschiedlich. Hier sind einige Möglichkeiten, ein leeres String-Array zu erstellen:

var arr = new string[0];
var arr = new string[]{};
var arr = Enumerable.Empty<string>().ToArray()

(Entschuldigung, auf dem Handy)

Es ist nicht wahr.
quelle
1

Diese lockigen Dinge sind manchmal schwer zu merken, deshalb gibt es eine ausgezeichnete Dokumentation :

// Declare a single-dimensional array  
int[] array1 = new int[5];
CodeCaster
quelle
Diese Antwort muss nicht bearbeitet werden, da die Antworten dem allgemeinen Zweck dienen und nicht der spezifischen Frage per say. Es antwortet auf "Was ist die Syntax zum Deklarieren und Initialisieren eines Arrays" und ist ein Zitat aus dem Link, den ich gepostet habe. OP kann ersetzen intmit , stringwenn er will.
CodeCaster
1

Ihre Syntax ist ungültig.

string[] arr = new string[5];

Dadurch wird arrein referenziertes Array von Zeichenfolgen erstellt, in dem sich alle Elemente dieses Arrays befinden null. (Da Zeichenfolgen Referenztypen sind )

Dieses Array enthält die Elemente von arr[0]bis arr[4]. Der newOperator wird verwendet, um das Array zu erstellen und die Array-Elemente auf ihre Standardwerte zu initialisieren. In diesem Beispiel werden alle Array-Elemente mit initialisiert null.

Single-Dimensional Arrays (C# Programming Guide)

Soner Gönül
quelle
Vielen Dank an alle ... frag mich nicht warum, aber der einzige Weg war: string [] arr = new String [0] as string [];
Aquanat
0

Wenn Sie ein leeres Array erstellen müssen, können Sie dies tun:

string[] arr = new string[0];

Wenn Sie nicht über die Größe wissen, können Sie auch List<string>so gerne verwenden

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();
Rahul
quelle
Es tut mir Leid. Ich habe Ihren Beitrag versehentlich mit falschen Änderungen ruiniert.
Soner Gönül
-3

Folgendes sollte gut funktionieren.

string[] arr = new string[] {""};
Karthikeyan Gunasheker
quelle
5
Dies ist kein leeres Array, da es ein Element enthält, das eine leere Zeichenfolge ist. arr.Length () wird zurückgeben 1.
Guillermo Prandi
Dies ist möglicherweise kein leeres Array, aber ich finde diese Antwort null sicher. Vielen Dank! 1 auf!
Hubert17