C # объявить пустой массив строк

152

Мне нужно объявить пустой массив строк, и я использую этот код

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

Но я получаю ошибку "имя метода ожидается".

В чем дело?

aquanat
источник
2
Зачем вам нужен пустой массив? Что ты пытаешься сделать?
г-н Т.
7
@MrT. не очень актуально для вопроса.
Джеймс
1
@ Джеймс - может быть, есть более элегантный способ сделать то, что он пытается сделать.
г-н Т.
4
@aquanat - хотя ответ уже принят, и я не знаю ваш код или логику, стоящую за ним, я бы смиренно предложил вам не возвращать пустой массив, а ноль и проверять вызывающую функцию, если возвращаемое значение равно нулю или не. Я думаю, что это было бы намного более элегантно, читабельно и эффективно.
Мистер Т.
2
Причина, по которой вы не хотите возвращать значение null, заключается в том, что потребитель метода должен проверять наличие значения null. Например, потребитель метода может поместить возвращаемое значение в foreach, и если возвращается пустой массив, проблем нет. Однако, если возвращается ноль, должна быть проверка на нуль перед повторением возвращаемого значения
JAB

Ответы:

265

Попробуй это

string[] arr = new string[] {};
Атиш Дипонгкор - MVP
источник
1
Спасибо всем ... не спрашивайте меня почему, но единственным способом было: string [] arr = new String [0] as string [];
Акванат
2
Метод Атиша сработал и устранил жалобу Visual Studio на использование переменной, которая не инициализируется, если я назначу ее в операторе if
Joe
1
Другой вариантc# Array.Empty<string>()
Янник Бройнис
68

Ваш синтаксис неправильный:

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

или

string[] arr = new string[0];
Андрей
источник
1
Почему в примерах строка является заглавной и не заглавной?
Это не так.
1
@newStackExchangeInstance, просто скопировал код "как есть" из вопроса. Обе строки компилируются нормально, хотя я согласен, что лучше придерживаться одного стиля.
Андрей
15

Если вы используете .net 4.6, у них есть новый синтаксис, который вы можете использовать:

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

var myArray = Array.Empty<string>();
Брайан
источник
Хороший трюк! И это также работает с IList <T>: IList <string> x = Array.Empty <string> ();
ZunTzu
9

Вы можете попробовать это

string[] arr = {};
Bharadwaj
источник
8

Конструкторы массивов разные. Вот несколько способов сделать пустой массив строк:

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

(извините, на мобильном телефоне)

It'sNotALie.
источник
1

Эти кудрявые вещи иногда трудно запомнить, поэтому есть отличная документация :

// Declare a single-dimensional array  
int[] array1 = new int[5];
CodeCaster
источник
Нет необходимости редактировать этот ответ, поскольку ответы служат общей цели, а не конкретному вопросу, скажем так. Он отвечает «Что такое синтаксис для объявления и инициализации массива» и является ссылкой на ссылку, которую я разместил. OP может заменить intс , stringесли он любит.
CodeCaster
1

Ваш синтаксис неверен.

string[] arr = new string[5];

Это создаст arrссылочный массив строк, в котором находятся все элементы этого массива null. (Поскольку строки являются ссылочными типами )

Этот массив содержит элементы из arr[0]в arr[4]. newОператор используется для создания массива и инициализации элементов массива в их значения по умолчанию. В этом примере все элементы массива инициализируются в null.

Single-Dimensional Arrays (C# Programming Guide)

Soner Gönül
источник
Спасибо всем ... не спрашивайте меня почему, но единственным способом было: string [] arr = new String [0] as string [];
Акванат
0

Если вам нужно создать пустой массив, вы можете сделать это:

string[] arr = new string[0];

Если вы не знаете о размере, вы также можете использовать List<string>как

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();
Рахул
источник
Мне так жаль. Я случайно испортил твой пост с неправильными правками.
Soner Gönül
-3

Следующее должно работать нормально.

string[] arr = new string[] {""};
Картикеян Гунашекер
источник
5
Это не пустой массив, так как он содержит один элемент, который является пустой строкой. arr.Length () вернется 1.
Гильермо
Это может быть не пустой массив, но я считаю этот ответ безопасным. Спасибо! 1 вверх!
hubert17