C # оголосити порожній рядковий масив


152

Мені потрібно оголосити порожній рядковий масив, і я використовую цей код

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

Але я отримую помилку "очікувана назва методу"

Що не так?


2
Для чого потрібен порожній масив? Що ти намагаєшся зробити?
Містер Т.

7
@MrT. не дуже стосується питання.
Джеймс

1
@James - можливо, є більш елегантний спосіб робити все, що він намагається зробити.
Містер Т.

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

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

Відповіді:


265

Спробуйте це

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

1
Дякую всім ... не запитуйте мене, чому, але єдиним способом було: string [] arr = new String [0] as string [];
акванат

2
Метод Атіша спрацював і усунув скаргу візуальної студії на використання змінної, яка не ініціалізується, якщо я призначу її в операторі if,
Joe

1
Інший варіантc# Array.Empty<string>()
Jannick Breunis

68

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

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

або

string[] arr = new string[0];

1
Чому в прикладах рядок є з великої літери, а не з великої літери?
ЦеNotALie.

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.