是否可以创建一个空数组而不指定大小?
例如,我创建了:
String[] a = new String[5];
我们可以创建上面的字符串数组没有大小?
是否可以创建一个空数组而不指定大小?
例如,我创建了:
String[] a = new String[5];
我们可以创建上面的字符串数组没有大小?
当前回答
我试过了:
string[] sample = new string[0];
但我只能插入一个字符串,然后我得到一个exceptionOutOfBound错误,所以我只是简单地为它输入一个大小,比如
string[] sample = new string[100];
或者另一种适合我的方法:
List<string> sample = new List<string>();
为列表赋值:
sample.Add(your input);
其他回答
声明一个没有大小的数组没有多大意义。数组的大小。当您声明一个特定大小的数组时,您将指定集合中可用的固定数量的插槽,可以容纳内容,并相应地分配内存。要向它添加一些东西,无论如何都需要重新初始化现有数组(即使您正在调整数组的大小,请参阅此线程)。想要初始化空数组的一种罕见情况是将array作为参数传递。
如果你想定义一个集合,但你不知道它可能有多大,数组不是你的选择,而是List<T>或类似的东西。
也就是说,声明数组而不指定大小的唯一方法是拥有一个大小为0的空数组。hemant和Alex Dn提供了两种方法。另一个更简单的选择是:
string[] a = { };
[括号内的元素应该隐式转换为定义的类型,例如,string[] a = {"a", "b"};]
或者另一个:
var a = Enumerable.Empty<string>().ToArray();
下面是一种更声明性的方式:
public static class Array<T>
{
public static T[] Empty()
{
return Empty(0);
}
public static T[] Empty(int size)
{
return new T[size];
}
}
现在你可以调用:
var a = Array<string>.Empty();
//or
var a = Array<string>.Empty(5);
在. 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,分配,分配-我最喜欢的关于微小隐藏分配的帖子。
结合@nawfal和@Kobi的建议:
namespace Extensions
{
/// <summary> Useful in number of places that return an empty byte array to avoid unnecessary memory allocation. </summary>
public static class Array<T>
{
public static readonly T[] Empty = new T[0];
}
}
使用的例子:
Array<string>.Empty
更新2019-05-14
(致@Jaider你)
最好使用。net API:
public static T[] Empty<T> ();
https://learn.microsoft.com/en-us/dotnet/api/system.array.empty?view=netframework-4.8
适用于:
.NET Core: 3.0预览5 2.2 2.1 2.0 1.1 1.0
.NET Framework: 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6 .NET Framework
.NET标准:2.1预览2.0 1.6 1.5 1.4 1.3
...
HTH
String [] a = new String [0];
或简称:
String [] a = {};
现在的首选方式是:
var a = Array.Empty<string>();
我写了一个短的正则表达式,你可以在Visual Studio中使用,如果你想替换零长度分配,例如新字符串[0]。 在Visual Studio中打开正则表达式选项使用查找(搜索):
新[][a-zA-Z0-9] + \ [0 \]
现在查找全部或F3(查找下一个)并将所有替换为Array.Empty<…>()!
简单优雅!
string[] array = {}