Visual Basic'te veri kümesi organizasyonu için birkaç yol vardır:
Standart diziler (Dim arr(10) As Integer): statik boyut, indeks ile hızlı erişim, dinamik olarak genişletilemez.
Collection (nesne koleksiyonu): dinamik olarak genişletilebilir, herhangi bir türdeki öğeleri saklayabilir (ancak katı türleme olmadan), anahtara ve indekse göre erişim, For Each desteği.
ArrayList (VB.NET'te): eski bir koleksiyon, Object türündeki nesneleri saklar, generic desteği yoktur, tür dönüştürme gerektirir (casting).
List(Of T) (VB.NET'te): tiplenmiş koleksiyon, dinamik boyut, hızlı erişim, LINQ desteği, veri türü güvenli.
Kullanım örnekleri:
Standart dizi:
Dim numbers(4) As Integer numbers(0) = 10
Collection:
Dim coll As New Collection() coll.Add("elma") 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
ArrayList ile List(Of T) arasında çalışırken hangi ana sorun ortaya çıkabilir?
Cevap: ArrayList, öğeleri Object olarak saklar, bu nedenle öğelere erişirken tür dönüşümü (casting) gerekir, bu da çalışma zamanında InvalidCastException alma olasılığını artırır. List(Of T), derleme aşamasında katı türleme sağlar, bu tür hataları ortadan kaldırır.
Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' Çalışma zamanı hatası Dim n As Integer = CType(arrList(0), Integer) ' TAMAM
Hikaye
Finansal sistemde dinamik boyutlu verileri saklamak için aktif olarak standart diziler kullanıldı. Önceden belirlenmiş boyutu aşınca diziler "kısaltılır", bu da yoğun yüklerde işlemlerin kaybolmasına neden olurdu.
Hikaye
ArrayList ile çalışırken koleksiyona stringler ve sayılar ekledik, ardından öğelerin toplamını hesaplamaya çalıştık. Sonuç olarak, stringler ile sayıları toplamak mümkün olmadığından uygulama tür dönüştürme hatası ile çöktü.
Hikaye
Collection'ı sipariş sınıflarını saklamak için kullandık, ancak öğelerin türlerini kontrol etmedik. Bir modülde yanlışlıkla sipariş nesnesi yerine metin ekledik, bu da mevcut olmayan bir nesnenin yöntemlerini çağırmaya çalıştığımızda tüm iş mantığımızın çökmesine yol açtı.