Подтвердить что ты не робот

Массив неизвестной длины в С#

Я только начал изучать С# и во введении к массивам они показали, как установить переменную как массив, но кажется, что нужно указать длину массива при назначении, так что, если я не знаю, длина массива?

4b9b3361

Ответ 1

Массиям должна быть назначена длина. Чтобы разрешить любое количество элементов, используйте класс List.

Например:

List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3

Ответ 2

Используйте List<> для создания "массива" неизвестной длины.

Используйте List<>.ToArray() для возврата реального массива, а не List.

var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();

Ответ 3

Вы можете создать массив с размером, установленным в переменной, т.е.

int size = 50;
string[] words = new string[size]; // contains 50 strings

Однако этот размер не может измениться позже, если вы решите, что вам нужно 100 слов. Если вам нужно, чтобы размер был действительно динамичным, вам нужно использовать другую структуру данных. Попробуйте List.

Ответ 4

Немного справочной информации:

Как сказано, если вы хотите иметь динамический набор вещей, используйте List<T>. Внутри List также использует массив для хранения. Этот массив имеет фиксированный размер, как и любой другой массив. Как только массив объявлен как имеющий размер, он не изменяется. Когда вы добавляете элемент в List, он добавляется в массив. Изначально List начинается с массива, который, как мне кажется, имеет длину 16. Когда вы пытаетесь добавить 17-й элемент в List, происходит то, что выделяется новый массив, который (я думаю) дважды размер старого, так что 32 элемента. Затем содержимое старого массива копируется в новый массив. Поэтому, хотя a List может показаться динамичным для внешнего наблюдателя, он также должен соблюдать правила.

И, как вы, возможно, догадались, копирование и распределение массивов не является бесплатным, поэтому нужно стремиться к тому, чтобы иметь как можно меньше из них, и сделать это, которое вы можете указать (в конструкторе List), начальный размер массива, который в идеальном сценарии достаточно велик, чтобы держать все, что вы хотите. Однако это микро-оптимизация и маловероятно, что это будет иметь для вас значение, но всегда приятно знать, что вы делаете на самом деле.

Ответ 5

Используйте ArrayList, если в .NET 1.x или List<yourtype>, если в .NET 2.0 или 3.x.

Найдите их в System.Collections и System.Collections.Generics.

Ответ 6

Вы также можете посмотреть в словарях, если ваши данные уникальны. Это даст вам два столбца для работы.

Имя пользователя, Итоговый счет

он дает вам множество встроенных инструментов для поиска и обновления только значения.

Ответ 7

var yummy = new List<string>();
while(person.FeelsHappy()) {
    yummy.Add(person.GetNewFavoriteFood());
}
Console.WriteLine("Sweet! I have a list of size {0}.", list.Count);
Console.WriteLine("I didn't even need to know how big to make it " +
    "until I finished making it!");

Ответ 8

попробуйте общий список вместо массива

Ответ 9

Вкратце, пожалуйста, используйте Коллекции и Generics.

Это необходимо для любого разработчика С#, стоит потратить время на изучение:)

Ответ 10

Как описано выше, общий список < > - лучший способ сделать это.

Если вы застряли в .NET 1. *, тогда вам придется использовать класс ArrayList. Это не проверяет тип времени компиляции, и вам также нужно добавить кастинг - messy.

В последовательных версиях также реализованы различные варианты - в том числе варианты безопасности потоков.