如何添加到数组C#的结尾?

时间:2009-12-03 00:52:51

标签: c# .net winforms arrays

如何在引用类的item末尾的Windows窗体上的TextBox和Button中添加新的ArrayList

private product[] value = new product[4];

value[1] = new product("One",5)
value[2] = new product("Two",3)
value[3] = new product("Three",8)

工作流

  • 将新产品详细信息输入textbox1textbox2textbox3
  • 当我点击Add时,新产品会添加到数组中:

    value[1] = new product("One",5)
    value[2] = new product("Two",3)
    value[3] = new product("Three",8)
    value[4] = new product("Four",2)

这样做的代码是什么?

7 个答案:

答案 0 :(得分:28)

数组是固定大小的,这意味着您无法添加比创建时分配的数字更多的元素,如果您需要自动调整大小集合,则可以使用List<T>ArrayList

示例:

// using collection initializers to add two products at creation time
List<Product> products = new List<Product>{new Product("One",5), new Product("Two",3) };

// then add more elements as needed
products.Add(new Product("Three",8));

答案 1 :(得分:16)

使用List作为其他人提到的。 如果您在阵列上设置,请使用

Array.Resize<Product>(ref product, your new size);

如果您只是要添加几个产品(在阵列的整个生命周期内),只需执行类似

的操作
Array.Resize<Product>(ref product, product.Length + 1);

如果你要添加很多产品,你可能想要做类似于List的事情 - 就像这样:

Array.Resize<Product>(ref product, product.Length * 2);

答案 2 :(得分:3)

我认为您需要一个List<product>集合,查看您的代码。然后只需在其上调用Add()方法

答案 3 :(得分:2)

您无法向数组添加项目,您必须创建一个更大的新数组并将项目复制到该数组。有一种方法,有点误导性地命名为Resize,因为它实际上没有调整数组的大小:

Array.Resize<product>(ref value, 5);

如果要将项目添加到集合中,则应改为使用List:

private List<product> value = new List<product>();
value.Add(new product("One",5));
value.Add(new product("Two",3));
value.Add(new product("Three",8));

value.Add(new product("Four",2));

编辑:
如果要调整阵列大小,可能需要增加大小而不是将其调整为特定值:

int index = value.Length;
Array.Resize<product>(ref value, index + 1);
value[index] = ...

答案 4 :(得分:1)

数组是零索引的,因此初始化为4的数组只能访问索引3 ...

如果你想让数组增长,那么你必须至少将数组初始化为你想要增长的数量,否则你必须创建一个新的更大的数组。大小并复制旧阵列;效率不高。

在这种情况下,你最好使用像列表一样的集合,而不是数组,这样大小就可以动态增加。

答案 5 :(得分:0)

您可能还应该查看Array versus List: When to use which?

答案 6 :(得分:0)

Array.Resize不是有效的方法。它使用新的大小创建一个新的数组,然后将旧的数组值复制到新的数组,然后用新的数组替换旧的数组。 如您所见,这不是添加项目的一种非常有效的方法。

除非要求您不能控制使用列表而不是数组,否则必须从一开始就创建具有最大预期尺寸的数组。

有关更多说明,请考虑以下示例: 您创建了一个数组,该数组可以容纳数百万个项目并用对象填充它。 您想将百万和一个对象添加到数组中。 您使用Array.Resize方法将数组大小更改为1000001。 当该方法尝试创建一个包含1000001个项目的新数组并将这些项目从旧数组复制到新数组时,您可能会遇到内存不足的错误,因为您尝试在内存中将两个百万个数组(容纳200万个对象)存储在同时您需要的所有项目都是一百万+1。 尽管要考虑在创建,复制和替换上浪费的时间和资源。