Как добавить в конец массива C #? - PullRequest
14 голосов
/ 03 декабря 2009

Как добавить новый item из TextBox и кнопки на форме Windows в конце 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)

Workflow

  • Введите информацию о новых продуктах в textbox1, textbox2, textbox3
  • Когда я нажимаю 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)

Какой код для этого?

Ответы [ 6 ]

28 голосов
/ 03 декабря 2009

Массивы имеют фиксированный размер, что означает, что вы не можете добавить больше элементов, чем количество, выделенное во время создания, если вам нужна коллекция автоматического определения размера, вы можете использовать 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));
16 голосов
/ 03 декабря 2009

Используйте список, как упоминали другие люди. Если вы настроены на массивы, используйте

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);
3 голосов
/ 03 декабря 2009

Я думаю, вам нужна коллекция List<product>, глядя на ваш код. Затем просто вызовите метод Add() для него

2 голосов
/ 03 декабря 2009

Вы не можете добавлять элементы в массив, вам нужно будет создать новый массив большего размера и скопировать элементы в него. Для этого есть метод, который несколько вводит в заблуждение с именем Resize, поскольку фактически не меняет размер массива:

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

Если вы хотите добавить элементы в коллекцию, вы должны использовать список вместо:

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));

Edit:
Если вы хотите изменить размер массива, вы можете увеличить размер, а не изменять его до определенного значения:

int index = value.Length;
Array.Resize<product>(ref value, index + 1);
value[index] = ...
1 голос
/ 03 декабря 2009

Массивы индексируются нулем, поэтому массив, инициализированный размером 4, может быть доступен только до индекса 3 ...

Если бы вы хотели, чтобы массив увеличивался, то вам нужно было бы либо инициализировать массив, по крайней мере, настолько большой, насколько вы хотели бы иметь возможность расти, либо вам нужно было бы создать новый массив с новым большим изменить размер и скопировать старый массив; не очень эффективно.

В этом случае лучше использовать коллекцию в виде списка, а не массива, чтобы размер мог динамически увеличиваться.

0 голосов
/ 04 декабря 2009

Возможно, вам также следует взглянуть на Массив и список: когда и какие использовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...