Поделиться через


Устранение неполадок при работе с коллекциями

Обновлен: Ноябрь 2007

На этой странице перечислены некоторые общие проблемы, которые могут возникнуть при работе с коллекциями.

Использование неверного типа коллекции

Существует несколько типов коллекций, доступных для разработчиков Visual Basic: класс Visual Basic Collection и классы коллекций, предоставляемые .NET Framework. Эти классы не совместимы друг с другом. Это означает, что если объявить переменную одним типом коллекции, этой переменной нельзя назначить объект другого типа. Кроме того, доступны только методы и свойства коллекции того типа, что был объявлен.

Основные различия между классами коллекций Visual Basic и .NET Framework включают:

  • Основание индекса. Коллекции .NET Frameworkиндексируются с нуля, в то время как коллекции Visual Basicиндексируются с единицы. Это означает, что элементы коллекции Visual Basic имеют значения индекса от 1 до значения Свойство Count (объект Collection), тогда как элементы коллекции .NET Framework имеют значения индекса от 0 до значения, на единицу меньшего, чем значение свойства коллекции Count.

  • Тип элементов. Коллекции Visual Basic поддерживают элементы типа Object, который не строго типизирован, так как можно добавить элемент любого типа. Это обычно приводит низкой производительности, так как компилятор должен упаковать и распаковать элементы, чтобы преобразовать их к типу Тип данных Object и обратно. Некоторые коллекции .NET Framework также имеют элементы типа Object, но многие другие являются строго типизированными, то есть они поддерживают элементы определенного типа, который делает их строго типизированными и обычно приводит к оптимальной производительности.

  • Элементы с ключами. Коллекция Visual Basic позволяет указать ключ при добавлении к ней элемента. Ключ является уникальным значением типа String, которое можно использовать позже для доступа к определенному элементу. Коллекции .NET Framework различаются в отношении ключа. Некоторые поддерживают ключи, а некоторые нет.

Далее перечислены пространства имен, содержащие различные определения классов коллекции.

  • Microsoft.VisualBasic — класс Visual Basic Collection

  • System.Collections — определенные классы коллекций, такие как списки, очереди, двоичные массивы, хэш-таблиц и словари

  • System.Collections.Generic — базовые классы коллекций, которые позволяют создавать коллекции со строгой типизацией и указывать тип данных элемента при их создании

  • System.Collections.Specialized — специализированные и строго типизированные классы коллекций, такие как связанные списки и гибридные словари, битовые векторы, коллекции имен объектов и коллекции для хранения строк

Правильный подход

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

Dim customers As New Microsoft.VisualBasic.Collection()
Dim stringQueue As New System.Collections.Generic.Queue(Of String)

После создания коллекции определенного типа, необходимо использовать только методы и свойства, определенные для данного типа. Задайте Option Strict On для перехвата любого неправильного присвоения объектов или некорректного доступа к членам во время компиляции.

См. также

Основные понятия

Коллекции в Visual Basic

Классы коллекций в Visual Basic

Ссылки

Оператор Option Strict