В Visual Basic существует несколько способов организации наборов данных:
Стандартные массивы (Dim arr(10) As Integer): статический размер, быстрый доступ по индексу, нельзя динамически расширять.
Collection (объектная коллекция): динамически расширяемая, может хранить элементы любых типов (но без строгой типизации), доступ по ключу и индексу, поддерживает For Each.
ArrayList (в VB.NET): устаревшая коллекция, хранит объекты типа Object, не поддерживает дженерики (Generic), требует приведения типов (casting).
List(Of T) (в VB.NET): типизированная коллекция, динамический размер, быстрый доступ, поддерживает LINQ, безопасна по типу данных.
Примеры использования:
Стандартный массив:
Dim numbers(4) As Integer numbers(0) = 10
Collection:
Dim coll As New Collection() coll.Add("apple") coll.Add(123) For Each item In coll Debug.Print(item) Next
ArrayList:
Dim arrList As New ArrayList() arrList.Add("abc") arrList.Add(123)
List(Of T):
Dim list As New List(Of Integer)() list.Add(10) list.Add(20) For Each num As Integer In list Console.WriteLine(num) Next
Какая главная проблема может возникнуть при работе с ArrayList по сравнению с List(Of T)?
Ответ: ArrayList хранит элементы как Object, поэтому требуется явное приведение типа (casting) при доступе к элементам, что увеличивает шанс получить InvalidCastException во время выполнения. List(Of T) обеспечивает строгую типизацию на этапе компиляции, исключая такие ошибки.
Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' Ошибка времени выполнения Dim n As Integer = CType(arrList(0), Integer) ' ОК
История
В финансовой системе активно использовали стандартные массивы для хранения данных динамического размера. При превышении заранее выделенного размера массивы "обрезались", из-за чего терялись транзакции во время пиковых загрузок.
История
При работе с ArrayList добавили в коллекцию строки и числа, а далее попытались рассчитать сумму элементов. В результате приложение упало с исключением при приведении типа, поскольку строки нельзя сложить с числами.
История
Использовали Collection для хранения классов заказов, но не проверяли типы элементов. В одном модуле по ошибке добавили текст вместо объекта заказа, что привело к сбою всей бизнес-логики при попытке вызвать методы несуществующего объекта.