In Visual Basic ci sono diversi modi per organizzare set di dati:
Array standard (Dim arr(10) As Integer): dimensione statica, accesso rapido per indice, non possono essere espansi dinamicamente.
Collection (collezione object): espandibile dinamicamente, può contenere elementi di qualsiasi tipo (ma senza tipizzazione rigorosa), accesso per chiave e indice, supporta For Each.
ArrayList (in VB.NET): collezione obsoleta, contiene oggetti di tipo Object, non supporta generici (Generic), richiede il casting.
List(Of T) (in VB.NET): collezione tipizzata, dimensione dinamica, accesso rapido, supporta LINQ, sicura dal punto di vista del tipo di dati.
Esempi di utilizzo:
Array standard:
Dim numbers(4) As Integer numbers(0) = 10
Collection:
Dim coll As New Collection() coll.Add("apple") coll.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
Qual è il problema principale che potrebbe sorgere quando si lavora con ArrayList rispetto a List(Of T)?
Risposta: ArrayList memorizza gli elementi come Object, quindi è necessario un casting esplicito per accedere agli elementi, il che aumenta il rischio di ottenere un InvalidCastException durante l'esecuzione. List(Of T) fornisce tipizzazione rigorosa in fase di compilazione, escludendo tali errori.
Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' Errore durante l'esecuzione Dim n As Integer = CType(arrList(0), Integer) ' OK
Storia
Nel sistema finanziario si utilizzavano attivamente gli array standard per memorizzare dati di dimensioni dinamiche. Quando si superava la dimensione preallocata, gli array venivano "troncati", causando la perdita di transazioni durante i picchi di carico.
Storia
Quando si lavorava con ArrayList, è stata aggiunta una stringa e numeri nella collezione e poi si è tentato di calcolare la somma degli elementi. Come risultato, l'applicazione è andata in crash con un'eccezione durante il casting, poiché le stringhe non possono essere sommate ai numeri.
Storia
È stata utilizzata Collection per memorizzare classi d'ordine, ma non sono stati controllati i tipi di elemento. In un modulo, per errore è stata aggiunta una stringa invece di un oggetto ordine, portando al fallimento dell'intera logica aziendale quando si è tentato di chiamare metodi di un oggetto inesistente.