История вопроса
Коллекция List(Of T) введена в VB.NET для замены устаревших коллекций, обеспечивая типобезопасность, динамическое изменение размера и быстрый доступ к элементам по индексу. Использование списка позволяет структурировать данные, работать с типизированными элементами и избегать распространённых ошибок, связанных с неуниверсальными коллекциями.
Проблема
Новички часто не понимают, как правильно обращаться к элементам списка, как добавлять, изменять и удалять элементы, и что произойдет при неверном использовании индексов (например, выход за пределы списка). Это приводит к исключениям во время работы программы.
Решение
В List(Of T) элементы индексируются с нуля. Доступ к элементу осуществляется по индексу как для чтения, так и для записи. Если индекс недопустим, возникает исключение ArgumentOutOfRangeException. Методы коллекции позволяют безопасно работать с элементами:
Пример кода:
Imports System.Collections.Generic Dim numbers As New List(Of Integer)() numbers.Add(10) numbers.Add(20) Dim first As Integer = numbers(0) ' Получить элемент с индексом 0 numbers(1) = 99 ' Установить элемент с индексом 1 ' Удаление numbers.RemoveAt(0) ' Удалить по индексу
Ключевые особенности:
Если обратиться к индексу, который равен количеству элементов в List(Of T), получим ли мы последний элемент?
Нет. Индексация идет с 0, а максимальный допустимый индекс — (Count - 1). При обращении по индексу равному Count возникнет ошибка ArgumentOutOfRangeException.
Можно ли добавить элемент в середину List(Of T) без удаления существующих данных?
Да, с помощью метода Insert:
numbers.Insert(1, 42) ' Вставит 42 на вторую позицию, сдвигая остальные вправо.
Опасно ли изменять коллекцию List(Of T) во время перебора с помощью For Each?
Опасно. Это приведет к InvalidOperationException. Для таких операций используйте For с индексом или сначала сформируйте список для удаления.
В программе перебирают List(Of T) с помощью For Each и внутри итерации удаляют элементы.
Плюсы:
Минусы:
Код перебирает элементы с конца к началу через For и удаляет подходящие объекты.
Плюсы:
Минусы: