.NET: ArrayList по сравнению со списком

Примечание: Неинициализированное смещение строки: *

Как видно из названия, возникает такой тип ошибки, когда вы, скорее всего, пытаетесь перебрать или найти значение из массива с не- существующий ключ.

Считаем, что вы пытаетесь показать каждую букву из $string

$string = 'ABCD'; 
for ($i=0, $len = strlen($string); $i <= $len; $i++){
    echo "$string[$i] \n"; 
}

. Вышеприведенный пример сгенерирует ( онлайн-демонстрацию ):

A
B
C
D
Notice: Uninitialized string offset: 4 in XXX on line X

И, как только скрипт заканчивается эхом D, вы получите ошибку, потому что внутри цикла for() вы сказали PHP, чтобы показать вам от первого до пятого символа строки из 'ABCD' Что, существует, но поскольку цикл начинает отсчитываться от 0 и эха D к моменту достижения значения 4, он выдает ошибку смещения.

Аналогичные ошибки:

36
задан John Saunders 12 February 2010 в 00:56
поделиться

5 ответов

ArrayLists по существу удерживаются от использования, поскольку они не вводятся - необходимо использовать броски с ними - и они медленнее и меньше пространства, эффективного для типов значения, потому что они требуют, чтобы объекты были упакованы.

Универсальные списки были начаты с.Net 2.0 и являются способом пойти. Часто Список лучше, чем массив с немногими оборотными сторонами.

, Поскольку эти наборы являются частью.Net Библиотеки базовых классов, этот совет также относится к C# и любому.Net языку, который поддерживает дженерики - это не характерно для VB.NET.

48
ответ дан Mike Scott 27 November 2019 в 05:45
поделиться

Список является универсальной реализацией ArrayList. ArrayList хранит все объекты как Система. Объект , который Вы должны затем бросить к соответствующему типу. ArrayLists неоднородны, Список может сохранить только один тип объектов - что тип предоставил как его универсальный параметр.

List<string> strList; // can store only strings
List<int> intList; // can store only ints
ArrayList someList; // can store anything
14
ответ дан arul 27 November 2019 в 05:45
поделиться

ArrayList позволяет Вам писать это:

Dim customers as new ArrayList
Dim c as new Customer
Dim m as new Manager
customers.Add(c)
customers.Add(m)

'This will cause an exception '  
For each c as Customer in customers
console.writeline(c.Name)
Next

Список А (Клиента) позволяет только объект Потребительского типа и типов, которые наследовались от Клиента, таким образом, Вы не можете сделать такие ошибки.

, Даже если необходимо поместить объекты несвязанных типов в том же наборе, Список (Объекта) является лучшим выбором, как это делает явным, что Вы имеете дело с различными типами.

3
ответ дан ggf31416 27 November 2019 в 05:45
поделиться

Список может использовать дженерики так, чтобы только объекты определенных типов могли быть помещены в него, так, чтобы у Вас могла быть дополнительная проверка типа и так, чтобы можно было сократить время обработки из-за упаковки и распаковывания. Arraylist не может использовать это. Почти во всех случаях Вы захотите использовать Список, а не Arraylist.

2
ответ дан Kibbee 27 November 2019 в 05:45
поделиться

ArrayLists занимают еще больше места при использовании на 64-битные для хранения примитивных элементов из-за 64-битных ссылок на память в отличие от 32-битных ссылок на 32-битных машинах и бокса. http://blogs.msdn.com/joshwil/archive/2004/04/13/112598.aspx

5
ответ дан 27 November 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: