C # deklaruj pustą tablicę ciągów

152

Muszę zadeklarować pustą tablicę ciągów i używam tego kodu

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

Ale pojawia się błąd „oczekiwano nazwy metody”.

Co jest nie tak?

aquanat
źródło
2
Dlaczego potrzebujesz pustej tablicy? Co próbujesz zrobić?
Pan T.
7
@MrT. nie ma związku z pytaniem.
James
1
@James - może istnieje bardziej elegancki sposób robienia tego, co próbuje zrobić.
Pan T.
4
@aquanat - chociaż odpowiedź została już zaakceptowana i nie znam Twojego kodu ani logiki za nią stojącej, pokornie sugerowałbym, abyś nie zwracał pustej tablicy, ale null i sprawdzał z funkcji wywołującej, czy zwrócona wartość jest pusta lub nie. Myślę, że byłoby dużo bardziej eleganckie, czytelne i wydajne.
Pan T.
2
Powodem, dla którego nie chcesz zwracać wartości null, jest to, że konsument metody musi sprawdzić wartość null. Na przykład konsument metody może umieścić zwróconą wartość w foreach i jeśli zwracana jest pusta tablica, nie ma problemu. Jeśli jednak zostanie zwrócona wartość null, przed iteracją zwróconej wartości musi nastąpić sprawdzenie wartości null
JAB

Odpowiedzi:

265

Spróbuj tego

string[] arr = new string[] {};
Atish Dipongkor - MVP
źródło
1
Dziękuję wszystkim ... nie pytajcie mnie dlaczego, ale jedynym sposobem było: string [] arr = new String [0] jako string [];
aquanat
2
Metoda Atisha zadziałała i wyeliminowała narzekanie Visual Studio na używanie zmiennej, która nie jest inicjalizowana, jeśli przypiszę ją w instrukcji if
Joe
1
Inną opcją jest c# Array.Empty<string>()
Jannick Breunis
68

Twoja składnia jest nieprawidłowa:

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

lub

string[] arr = new string[0];
Andrei
źródło
1
Dlaczego w przykładach ciągi są pisane wielkimi literami i nie są pisane wielką literą?
NIE jest.
1
@newStackExchangeInstance, właśnie skopiowałem kod „taki jaki jest” z pytania. Obie linie kompilują się dobrze, chociaż zgadzam się, że podążanie za jednym stylem jest lepsze.
Andrei
15

Jeśli używasz .net 4.6, mają nową składnię, której możesz użyć:

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

var myArray = Array.Empty<string>();
Brian
źródło
Niezła sztuczka! Działa również z IList <T>: IList <string> x = Array.Empty <string> ();
ZunTzu
9

Możesz tego spróbować

string[] arr = {};
Bharadwaj
źródło
8

Konstruktory tablic są różne. Oto kilka sposobów na utworzenie pustej tablicy ciągów:

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

(przepraszam, na telefonie komórkowym)

To NIE jest.
źródło
1

Te kręcone rzeczy są czasami trudne do zapamiętania, dlatego istnieje doskonała dokumentacja :

// Declare a single-dimensional array  
int[] array1 = new int[5];
CodeCaster
źródło
Nie ma potrzeby edytowania tej odpowiedzi, ponieważ odpowiedzi służą celowi ogólnemu, a nie konkretnemu pytaniu za powiedzenie. Odpowiada „Jaka jest składnia deklarowania i inicjowania tablicy” i jest cytatem z linku, który zamieściłem. OP może zastąpić intze stringjeśli chce.
CodeCaster
1

Twoja składnia jest nieprawidłowa.

string[] arr = new string[5];

Spowoduje to utworzenie arr, do której odwołuje się tablica ciągów, w której znajdują się wszystkie elementy tej tablicy null. (Ponieważ ciągi są typami referencyjnymi )

Ta tablica zawiera elementy od arr[0]do arr[4]. newOperator jest wykorzystywane do tworzenia macierzy i zainicjować elementy tablicy do ich wartości domyślnych. W tym przykładzie wszystkie elementy tablicy są inicjowane null.

Single-Dimensional Arrays (C# Programming Guide)

Soner Gönül
źródło
Dziękuję wszystkim ... nie pytajcie mnie dlaczego, ale jedynym sposobem było: string [] arr = new String [0] jako string [];
aquanat
0

Jeśli musisz utworzyć pustą tablicę, możesz to zrobić:

string[] arr = new string[0];

Jeśli nie znasz rozmiaru, możesz również użyć List<string>polubienia

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();
Rahul
źródło
Tak mi przykro. Przypadkowo zrujnowałem Twój post, wprowadzając błędne zmiany.
Soner Gönül
-3

Poniższe powinny działać dobrze.

string[] arr = new string[] {""};
Karthikeyan Gunasheker
źródło
5
To nie jest pusta tablica, ponieważ zawiera jeden element, który jest pustym ciągiem. arr.Length () zwróci 1.
Guillermo Prandi
To może nie być pusta tablica, ale uważam, że ta odpowiedź jest zerowa. Dzięki! 1 w górę!
hubert17