2009-02-27 2 views

ответ

133

Посмотрите на Generic Lists.

+8

+1 для того, чтобы подталкивать его к классу коллекций –

+4

Вопрос (хотя и короткий и неописанный) не спрашивает об общем списке - вопрос может быть задан о 'dynamic []' https://msdn.microsoft.com /en-GB/library/dd264736.aspx (массив динамических типов) или 'ExpandoObject' https://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(v=vs.110).aspx Я мог бы ответить -1, не упоминая эти –

+0

@ LukeTO'Brien, динамика была введена в C# 4.0, которая была выпущена через год после того, как этот вопрос изначально был задан. OP, вероятно, спрашивал о изменяемой по размеру структуре данных, такой как https://en.wikipedia.org/wiki/Dynamic_array –

38

List<T> для строго типизированного, или ArrayList, если у вас есть .NET 1.1 или вы любите лить переменные.

+1

+1 приятное объяснение. –

70

Расширение на ответ Криса и Миголя с образцом кода.

Использование массива

Student[] array = new Student[2]; 
array[0] = new Student("bob"); 
array[1] = new Student("joe"); 

Используя общий список. Под капотом класс <T> использует массив для хранения, но делает это таким образом, чтобы он мог эффективно расти.

List<Student> list = new List<Student>(); 
list.Add(new Student("bob")); 
list.Add(new Student("joe")); 
Student joe = list[1]; 
+2

этот пример наполовину плохой, потому что мы оба говорили о ArrayList – Migol

+28

@Migol, он также наполовину хорош;) – JaredPar

+8

Этот ответ лучше вашего @Migol, потому что это показывает, как на самом деле использовать List <> вместо того, чтобы просто упоминать об этом как ключевое слово. «half-bad» -> «half-good» -> good – fhugas

38

Иногда простые массивы предпочтительнее Generic списков, так как они более удобны (лучше производительность для дорогостоящих вычислений -Numerical алгебры приложений, например, или для обмена данными с помощью статистического программного обеспечения, как R или Matlab)

В этом случае вы можете использовать метод ToArray() после начала своего списка динамически

List<string> list = new List<string>(); 
list.Add("one"); 
list.Add("two"); 
list.Add("three"); 

string[] array = list.ToArray(); 

конечно, это имеет смысл только в том случае, если размер массива никогда не известен ни фиксированной априорного. , если вы уже знаете размер вашего массива в какой-то момент программы, лучше начать его как массив фиксированной длины. (Если вы извлечь данные из ResultSet, например, вы можете рассчитывать его размер и инициировать массив такого размера, динамически)

С уважением,

МДжем

+1

Не стоит, если вы используете индексатор. – aaimnr

+2

Ararys не являются более удобными (они предлагают подмножество интерфейса ) и предлагают почти ту же производительность, поскольку в списке используется регулярный массив внизу. Итерации для 6000000 элементов: Список/для: 1971ms Array/для: 1864ms (Benchmark от http://stackoverflow.com/questions/454916/performance-of-arrays-vs-lists) – aaimnr

+5

Если у вас * have * передать массив в интерфейс, а затем он должен быть массивом. Гораздо проще создать список, а затем сделать его в массив непосредственно перед его передачей. Мне нравится этот ответ больше, чем другие, потому что он решает вопрос! –

1

Используйте список массива, который на самом деле реализовать массив. Сначала требуется массив размера 4, и когда он заполняется, новый массив создается с его двойным размером, а данные первого массива копируются во второй массив, теперь новый элемент вставляется в новый массив. также имя второго массива создает псевдоним первого, так что он может получить доступ к одним и тем же именем, что и предыдущая, и первый массив получает расположенный

0

динамического массива Пример:

Console.WriteLine("Define Array Size? "); 
int number = Convert.ToInt32(Console.ReadLine()); 

Console.WriteLine("Enter numbers:\n"); 
int[] arr = new int[number]; 

for (int i = 0; i < number; i++) 
{ 
    arr[i] = Convert.ToInt32(Console.ReadLine()); 
} 
for (int i = 0; i < arr.Length; i++) 
{ 
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString()); 
} 
Console.ReadKey(); 
Смежные вопросы