在C#中使用set-length数组

Mar*_*rty 3 c# arrays

我是C#的新手,但在ActionScript 3中有很强的背景知识.

在AS3中,您可以像这样定义一个数组:

var array:Array = [];
Run Code Online (Sandbox Code Playgroud)

然后通过push()以下方式向该阵列添加无限项:

array.push(1);
Run Code Online (Sandbox Code Playgroud)

我在C#中注意到你需要为数组定义一个永久(我认为)的长度,例如:

string[] array = {"this","has","a","length","of","six"};
Run Code Online (Sandbox Code Playgroud)

要么:

string[] array = new string[6];
Run Code Online (Sandbox Code Playgroud)

如果我尝试向数组添加新项目将超出此数组的长度,我将收到一个错误:

array[6] = "failure";
Run Code Online (Sandbox Code Playgroud)

我发现很难从能够自由地添加/删除数组中的项目,到现在必须定义最大长度.

当一个数组可以包含0到10000个实体之间的任何地方时,我不确定如何在游戏环境中接近它.

  1. 我是否只是将数组长度设置得足够长,以满足我所拥有的所有实际数量的实体?
  2. 是否有不同的方式我应该存储我应该在C#中使用的实体,我不知道?
  3. 我是否编写了自己的类,用新的长度重新声明数组,并将旧数组中的对象复制到新数组中,剩下1个空闲插槽?

任何的意见都将会有帮助!

Rus*_*Cam 6

你发现,阵列在C#中是固定大小的; 调整数组大小会引用指定大小的新数组实例,并将数组中的项复制到新引用的实例中.

您在.NET中寻找的是通用集合,例如List<T>,T某些类型的泛型类型参数.在您突出显示的特定情况下,您可能希望使用aList<string>

var strings = new List<string>();
Run Code Online (Sandbox Code Playgroud)

现在您可以使用添加字符串到集合 Add()

strings.Add("string to add");
Run Code Online (Sandbox Code Playgroud)

在C#3中,引入了集合初始化器,以便您可以更简洁地初始化集合

var strings = new List<string> { "string1", "string2", "string3" };
Run Code Online (Sandbox Code Playgroud)

创建泛型集合的实例时,它以默认大小开始; List<T>在.NET 4中,默认大小为0,但在添加第一个项目时,默认大小增加到4(默认大小可能因不同的集合类型和框架版本而异,因此听起来默认大小是实现细节).集合通常使用双倍策略通过框架调整大小,也就是说,当集合达到容量并且另一个项目正在尝试添加时,集合容量通常会加倍 - 这在通用集合的实现中得到了解决.你不需要关心的事情.

如果您想要记住它,那么当您向集合添加已知数量的项目或知道要添加的项目数量级时.在这种情况下,您可以考虑使用重载构造函数List<T>来获取int默认大小

var strings = new List<string>(500);
Run Code Online (Sandbox Code Playgroud)