是否可以创建一个空数组而不指定大小?

例如,我创建了:

String[] a = new String[5];

我们可以创建上面的字符串数组没有大小?


当前回答

如果要使用一个事先不知道其大小的集合,有比数组更好的选择。

使用List<string>代替-它将允许您根据需要添加任意数量的项,如果您需要返回一个数组,请在变量上调用ToArray()。

var listOfStrings = new List<string>();

// do stuff...

string[] arrayOfStrings = listOfStrings.ToArray();

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

string[] emptyStringArray = new string[0]; 

其他回答

性能规则CA1825:避免分配零长度的数组。

规则解释: 初始化零长度数组会导致不必要的内存分配。相反,通过调用array来使用静态分配的空数组实例。空方法。

在你的情况下:

var a = Array.Empty<string>(); 

你可以:

string[] a = { String.Empty };

注意:OP意味着不需要指定大小,而不是使数组无大小

我知道数组不能没有大小,但你可以用

List<string> l = new List<string>() 

然后是l.ToArray()。

在. net 4.6中,首选的方法是使用一个新的方法Array。空:

String[] a = Array.Empty<string>();

实现很简洁,使用了泛型类中的静态成员在。net中的行为:

public static T[] Empty<T>()
{
    return EmptyArray<T>.Value;
}

// Useful in number of places that return an empty byte array to avoid
// unnecessary memory allocation.
internal static class EmptyArray<T>
{
    public static readonly T[] Value = new T[0];
}

(为了清晰起见,删除了与合同相关的代码)

参见:

数组中。参考源上的空源代码 Array.Empty<T>()简介 Marc Gravell - Allocaction,分配,分配-我最喜欢的关于微小隐藏分配的帖子。

可以在运行时定义数组大小。

这将允许您动态地计算数组的大小。但是,一旦定义,大小是不可变的。

Array a = Array.CreateInstance(typeof(string), 5);