Устранение неполадок при работе с коллекциями
Обновлен: Ноябрь 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