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?


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[] {};

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];

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>();

Niezła sztuczka! Działa również z IList <T>: IList <string> x = Array.Empty <string> ();
— ZunTzu


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)


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];

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)


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();

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[] {""};

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.