Les collections en Visual Basic sont nécessaires pour stocker un groupe d'objets ou de valeurs dans une variable. Les collections standard, telles que Collection, ArrayList et les génériques List(Of T), offrent différentes méthodes d'accès, d'ajout et de suppression d'éléments, et se distinguent par leur sécurité de type, leur performance et leurs fonctionnalités.
Dans le VB6 classique, il n'y avait qu'une collection typée Collection. Dans .NET, des structures plus puissantes sont apparues, parmi lesquelles ArrayList (un ancien type universel sans typage strict) et les collections génériques modernes (Generic Collections) comme List(Of T), qui sont apparues dans .NET 2.0.
La principale difficulté est le choix de la collection appropriée pour les tâches du projet. Les collections sans typage strict (ArrayList, Collection) peuvent entraîner des erreurs à l'exécution ou des problèmes de performance. Les collections génériques nécessitent une paramétrisation mais offrent une sécurité maximale et une facilité de manipulation des types.
Utilisez l'ancienne collection Collection uniquement pour interagir avec du code obsolète, et pour de nouveaux projets, privilégiez List(Of T). La collection ArrayList ne sera utile que si vous n'avez pas d'informations sur le type des éléments, mais il est préférable d'utiliser List(Of Object) ou d'autres collections génériques.
Exemple de code :
' Collection Dim coll As New Collection() coll.Add("Hello") coll.Add(123) ' ArrayList Dim arr As New ArrayList() arr.Add("World") arr.Add(456) ' List(Of T) Dim list As New List(Of Integer)() list.Add(789) list.Add(101112)
Caractéristiques clés :
Quelle est la différence entre Collection et un tableau en Visual Basic ?
Un tableau fixe sa taille lors de l'initialisation, stocke des éléments d'un seul type et permet un accès rapide par index. La Collection augmente dynamiquement, peut stocker des objets de différents types et permet un accès par clé (mais non indexable dans VB6).
Que se passe-t-il si vous essayez d'ajouter un objet avec une clé identique dans une Collection ?
Essayer d'ajouter un élément avec une clé déjà existante entraînera une erreur à l'exécution "Key already exists in collection".
Dim c As New Collection() c.Add("one", "a") c.Add("two", "a") ' Erreur
Peut-on convertir ArrayList en List(Of T) de manière standard ?
Non, la conversion standard est impossible — vous devrez créer manuellement une nouvelle List(Of T) et copier les éléments appropriés, sinon des erreurs à l'exécution surviendront en raison du typage lâche de l'ArrayList.
Un projet pour stocker des clients utilise un ArrayList, dans lequel une chaîne a été accidentellement ajoutée à la place d'un objet Client. Lors du traitement, une erreur de conversion de type se produit, difficile à retracer.
Avantages :
Inconvénients :
Une List(Of Client) strictement typée est utilisée, tout le code est compilé avec l'option Strict On. Les erreurs sont détectées lors de la compilation, la structure est facilement extensible avec de nouvelles méthodes LINQ.
Avantages :
Inconvénients :