En Visual Basic, il existe plusieurs moyens d'organiser des ensembles de données :
Tableaux standard (Dim arr(10) As Integer) : taille statique, accès rapide par indice, ne peut pas être agrandi dynamiquement.
Collection (collection d'objets) : extensible dynamiquement, peut stocker des éléments de tous types (mais sans typage strict), accès par clé et par indice, supporte For Each.
ArrayList (en VB.NET) : collection obsolète, stocke des objets de type Object, ne supporte pas les génériques (Generic), nécessite un casting.
List(Of T) (en VB.NET) : collection typée, taille dynamique, accès rapide, supporte LINQ, sécurisée par type de données.
Exemples d'utilisation :
Tableau standard :
Dim numbers(4) As Integer numbers(0) = 10
Collection :
Dim coll As New Collection() corr.Add("apple") corr.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
Quel est le principal problème qui peut survenir lors de l'utilisation de ArrayList par rapport à List(Of T) ?
Réponse : ArrayList stocke des éléments comme Object, nécessitant un casting explicite lors de l'accès aux éléments, ce qui augmente le risque de recevoir un InvalidCastException à l'exécution. List(Of T) assure un typage strict au moment de la compilation, éliminant de telles erreurs.
Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' Erreur d'exécution Dim n As Integer = CType(arrList(0), Integer) ' OK
Histoire
Dans le système financier, des tableaux standard ont été utilisés activement pour stocker des données de taille dynamique. Lorsque la taille préalablement allouée était dépassée, les tableaux étaient "coupés", ce qui entraînait la perte de transactions pendant les périodes de forte charge.
Histoire
En travaillant avec ArrayList, des chaînes et des nombres ont été ajoutés à la collection, puis une tentative de calcul de la somme des éléments a échoué. L'application a planté avec une exception lors du casting, car les chaînes ne peuvent pas être additionnées avec des nombres.
Histoire
Une Collection a été utilisée pour stocker des classes de commandes, mais les types d'éléments n'ont pas été vérifiés. Par erreur, du texte a été ajouté au lieu d'un objet commande dans un module, entraînant un échec de toute la logique métier lors de la tentative d'appel de méthodes d'un objet inexistant.