Как добавить к концу массив С#?
Как добавить новый item
из TextBox и Button в Windows Form в конце 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)
Каков код для этого?
Ответы
Ответ 1
Массивы - это фиксированный размер, что означает, что вы не можете добавить больше элементов, чем число, выделенное во время создания, если вам нужна коллекция автоматического выбора размеров, вы можете использовать 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));
Ответ 2
Использовать Список, как упомянули другие люди.
Если вы настроены на массивы, используйте
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
Мне кажется, вам нужна коллекция List<product>
, глядя на ваш код. Затем просто вызовите метод Add()
на нем
Ответ 4
Вы не можете добавлять элементы в массив, вам нужно будет создать новый массив, который больше, и скопировать элементы в него. Для этого есть метод, который несколько вводит в заблуждение 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] = ...
Ответ 5
Массивы нулевые индексируются, поэтому массив, инициализированный до размера 4, может быть доступен только до индекса 3...
Если вы хотите, чтобы массив увеличивался, вам нужно либо инициализировать массив, по крайней мере такой же большой, как вы хотели, чтобы он мог расти, или вам нужно было бы создать новый массив с новым большим размер и скопировать старый массив; не очень эффективно.
В этом случае вам лучше использовать коллекцию, такую как список, а не массив, чтобы размер мог динамически увеличиваться.
Ответ 6
Вероятно, вы также можете взглянуть на Array versus List: когда использовать какой?
Ответ 7
Array.Resize не является эффективным методом. Он создает новый массив с новым размером, затем копирует старые значения массива в новый массив и затем заменяет старый массив новым массивом. Как видите, это не очень эффективный способ добавления элемента.
Если не требуется, чтобы у вас не было управления использованием списка вместо массива или созданием массива с максимальным ожидаемым размером с самого начала.
Для более подробного объяснения рассмотрим этот пример: вы создали массив, который может содержать миллион элементов и заполнять его объектами. Вы хотите добавить миллион и один объект в массив. Вы используете метод Array.Resize, чтобы изменить размер массива на 1000001. Когда метод пытается создать новый массив из 1000001 элементов и скопировать элементы из старого массива в новый массив, вы можете получить ошибку нехватки памяти, потому что вы пытаетесь получить TWO массивы из миллиона (содержащие 2 миллиона объектов) в памяти одновременно, а все, что вам нужно, - один миллион +1. Хотя учтите время и ресурсы, затраченные на создание, копирование и замену.