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


152

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

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

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

В чем дело?


2
Зачем вам нужен пустой массив? Что ты пытаешься сделать?
г-н Т.

7
@MrT. не очень актуально для вопроса.
Джеймс

1
@ Джеймс - может быть, есть более элегантный способ сделать то, что он пытается сделать.
г-н Т.

4
@aquanat - хотя ответ уже принят, и я не знаю ваш код или логику, стоящую за ним, я бы смиренно предложил вам не возвращать пустой массив, а ноль и проверять вызывающую функцию, если возвращаемое значение равно нулю или не. Я думаю, что это было бы намного более элегантно, читабельно и эффективно.
Мистер Т.

2
Причина, по которой вы не хотите возвращать значение null, заключается в том, что потребитель метода должен проверять наличие значения null. Например, потребитель метода может поместить возвращаемое значение в foreach, и если возвращается пустой массив, проблем нет. Однако, если возвращается ноль, должна быть проверка на нуль перед повторением возвращаемого значения
JAB

Ответы:


265

Попробуй это

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

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


8

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

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

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


1

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

// Declare a single-dimensional array  
int[] array1 = new int[5];

Нет необходимости редактировать этот ответ, поскольку ответы служат общей цели, а не конкретному вопросу, скажем так. Он отвечает «Что такое синтаксис для объявления и инициализации массива» и является ссылкой на ссылку, которую я разместил. OP может заменить intс , stringесли он любит.
CodeCaster

1

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

string[] arr = new string[5];

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

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

Single-Dimensional Arrays (C# Programming Guide)


Спасибо всем ... не спрашивайте меня почему, но единственным способом было: 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.