ProgrammationDéveloppeur VB.NET Desktop

Comment les collections standard (par exemple, Collection, ArrayList et List(Of T)) sont-elles réalisées et utilisées en Visual Basic, quelles sont leurs différences fondamentales et quels points doivent être pris en compte lors du choix d'un type de collection pour une tâche spécifique ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

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.

Historique de la question

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.

Problématique

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.

Solution

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 :

  • La collection Collection est compatible avec le code obsolète VB6, ne nécessite pas de déclaration de type
  • ArrayList est une liste extensible dynamiquement sans typage strict, capable de contenir des objets de n'importe quel type
  • List(Of T) est une collection générique nécessitant la spécification du type, offrant sécurité et performance

Questions pièges.

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.

Erreurs typiques et anti-patrons

  • Utilisation de Collection/ArrayList pour de nouveaux projets plutôt que des collections génériques
  • Perte de sécurité des types en ajoutant différents types dans une collection non générique
  • Violation de l'encapsulation de la collection (retourner celle-ci à l'extérieur pour modification)

Exemple de la vie réelle

Cas négatif

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 :

  • Rapidité de mise en œuvre initiale

Inconvénients :

  • Absence de sécurité typologique
  • Difficultés de maintenance/d'extension

Cas positif

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 :

  • Sécurité des types
  • Scalabilité
  • Haute performance

Inconvénients :

  • Nécessité de spécifier le type lors de la déclaration, ce qui augmente légèrement le code