C#声明空字符串数组

205

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

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

但是我遇到了“需要方法名”的错误。

出了什么问题?


2
为什么需要一个空数组?你想做什么? - Mr T.
11
@MrT. 并不是问题相关的内容。 - James
1
@James - 或许有更优雅的方式来完成他想要做的事情。 - Mr T.
4
@aquanat - 尽管已经有一个被接受的答案,而且我不知道你的代码或其背后的逻辑,但我谦虚地建议你不要返回一个空数组,而是返回 null,并从调用函数中检查返回值是否为 null。我认为这样会更加优雅、易读和高效。 - Mr T.
7
不返回null的原因是方法的使用者需要检查null。例如,方法的使用者可能会将返回值放入foreach中,如果返回一个空数组,则没有问题。但是,如果返回null,则在迭代返回值之前必须进行null检查。 - JAB
显示剩余4条评论
11个回答

342

试一试

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

1
谢谢大家...不要问我为什么,但唯一的方法是:string[] arr = new String[0] as string[]; - aquanat
2
Atish的方法奏效了,如果我在if语句中赋值,它可以消除Visual Studio对使用未初始化变量的抱怨。 - Joe
3
另一种选项是c# Array.Empty<string>() - Jannick Breunis
1
这种方法不是当前的最佳实践,因为它会分配不必要的内存(https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1825),所以不应该被接受作为答案。请使用@Brian提到的语法来避免这种情况。 - adamency

78

你的语法有误:

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

或者

string[] arr = new string[0];

1
为什么你的例子中字符串既有首字母大写又有首字母小写的情况? - It'sNotALie.
1
@newStackExchangeInstance,只是从问题中直接复制了代码“as is”。这两行代码都可以编译通过,尽管我同意遵循一种风格更好。 - Andrei

45

如果您使用的是.NET Framework 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 = {};

这对我来说很意外,在对象初始化器中使用时,结果居然是 null - xr280xr

8

数组的构造函数是不同的。这里有几种方法可以创建一个空字符串数组:

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

抱歉,我在手机上。

2
你的语法无效。
string[] arr = new string[5];

那将创建一个字符串的引用数组arr,其中该数组的所有元素都是null。(因为字符串是引用类型)。
该数组包含从arr [0]arr [4]的元素。使用new运算符创建数组并将数组元素初始化为默认值。在此示例中,所有数组元素都初始化为null单维数组 (C# 编程指南)

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

0

如果你必须创建一个空数组,你可以这样做:

string[] arr = new string[0];

如果您不知道大小,那么您也可以使用List<string>,就像这样

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();

非常抱歉,我因为错误的编辑意外毁了你的帖子。 - Soner Gönül

0

那些花括号有时很难记住,这就是为什么有优秀的文档

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

声明和初始化数组的语法是什么?如果您想声明一个整数类型的数组,可以使用以下语法:int myArray[] = {1, 2, 3, 4, 5}; 如果您想声明一个字符串类型的数组,可以将“int”替换为“string”。 - CodeCaster

0
// zero-element array
var arr0 = System.Array.Empty<string>(); // Recommended: https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1825
var arr1 = new string[0];

// 5-Elements array with null values
var arr2 = new string[5];

// 5-Elements array with empty string values
var arr3 = System.Linq.Enumerable.Repeat(string.Empty, 5).ToArray();
var arr4 = System.Linq.Enumerable.Range(0, 5).Select(_ => string.Empty).ToArray();

-2
可以使用以下代码实现: private List list = new List(); string[] dnormlines = list.ToArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接