ПрограммированиеVB.NET разработчик

Как реализуются массивы и коллекции в Visual Basic? Сравните стандартные массивы, Collection, ArrayList и List(Of T) по возможностям и применению.

Проходите собеседования с ИИ помощником Hintsage

Ответ.

В 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 для хранения классов заказов, но не проверяли типы элементов. В одном модуле по ошибке добавили текст вместо объекта заказа, что привело к сбою всей бизнес-логики при попытке вызвать методы несуществующего объекта.