Ответов (11)11
Массивам необходимо присвоить длину. Чтобы разрешить любое количество элементов, используйте List
класс.
Например:
List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
Вы можете создать массив с размером, установленным для переменной, т.е.
int size = 50;
string[] words = new string[size]; // contains 50 strings
Однако этот размер не может измениться позже, если вы решите, что вам нужно 100 слов. Если вам нужен действительно динамический размер, вам нужно будет использовать другую структуру данных. Попробуй List
.
Если вам действительно нужно использовать массив вместо списка, вы можете создать массив, размер которого рассчитывается во время выполнения следующим образом ...
например, мне нужен двумерный массив размером n на n. n будет получено во время выполнения от пользователя
int n = 0;
bool isInteger = int.TryPase(Console.ReadLine(), out n);
var x = new int[n,n];
Немного справочной информации:
Как уже говорилось, если вы хотите иметь динамическую коллекцию вещей, используйте файл List<T>
. Внутри List также использует массив для хранения. Этот массив имеет фиксированный размер, как и любой другой массив. После того, как массив объявлен как имеющий размер, он не меняется. Когда вы добавляете элемент в List
, он добавляется в массив. Первоначально List
массив начинается с массива, длина которого, как мне кажется, равна 16. Когда вы пытаетесь добавить 17-й элемент к List
, происходит то, что выделяется новый массив, который (я думаю) в два раза больше старого. , итак 32 шт. Затем содержимое старого массива копируется в новый массив. Таким образом, хотя a List
может казаться динамичным для внешнего наблюдателя, внутри он также должен соответствовать правилам.
И, как вы могли догадаться, копирование и размещение массивов не являются бесплатными, поэтому нужно стремиться иметь как можно List
меньше таких массивов, и для этого вы можете указать (в конструкторе ) начальный размер массива, который в идеальном случае достаточно велик, чтобы вместить все, что вы хотите. Однако это микрооптимизация, и вряд ли она когда-нибудь будет иметь значение для вас, но всегда приятно знать, что вы на самом деле делаете.
Как подробно описано выше, общий List <> - лучший способ сделать это.
Если вы застряли в .NET 1. *, вам придется вместо этого использовать класс ArrayList. Здесь нет проверки типа во время компиляции, и вам также нужно добавить приведение - беспорядочно.
В последующих версиях также были реализованы различные варианты, в том числе поточно-ориентированные.