C#声明空字符串数组


152

我需要声明一个空的字符串数组,我正在使用此代码

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

但是我收到“期望的方法名称”错误。

怎么了?


2
为什么需要一个空数组?你想做什么?
T先生,

7
@先生 与问题无关。
詹姆斯

1
@James-也许有一种更优雅的方式来做他想做的事情。
T先生,

4
@aquanat-尽管答案已经被接受并且我不知道您的代码或其背后的逻辑,但我谨建议您不要返回空数组,而是返回null并从调用函数中检查返回的值是否为null或不。我认为它将更加优雅,可读和高效。
T.先生

2
您不希望返回null的原因是该方法的使用者必须检查null。例如,方法的使用者可以将返回的值放在foreach中,如果返回空数组,就没有问题。但是,如果返回null,则必须在迭代返回值之前对null进行检查
JAB 2014年

Answers:


265

试试这个

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

1
谢谢大家……不要问我为什么,但是唯一的方法是:string [] arr = new String [0] as string [];
2013年

2
Atish的方法行之有效,消除了Visual Studio抱怨使用变量的问题,如果我在if语句中为其赋值,该变量将不会初始化
Joe

1
其他选择是c# Array.Empty<string>()
Jannick Breunis

68

您的语法错误:

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

要么

string[] arr = new string[0];

1
为什么在您的示例中字符串同时大写而不大写?
不是。

1
@newStackExchangeInstance,只是从问题中“按原样”复制了代码。两条线都可以很好地编译,尽管我同意遵循一种样式更好。
Andrei

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可以根据需要替换intstring
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 [];
2013年

0

如果必须创建一个空数组,可以执行以下操作:

string[] arr = new string[0];

如果你不知道的大小,然后你也可以使用List<string>,以及像

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();

我很抱歉。我不小心用错误的编辑破坏了您的帖子。
SonerGönül13年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.