在视觉基本中,可以通过几种方式组织数据集:
标准数组 (Dim arr(10) As Integer): 静态大小,通过索引快速访问,无法动态扩展。
集合(对象集合):动态扩展,可以存储任何类型的元素(但没有严格的类型检查),支持通过键和索引访问,支持For Each。
ArrayList(在VB.NET中):过时的集合,存储Object类型的对象,不支持泛型(Generic),需要类型转换(casting)。
List(Of T)(在VB.NET中):类型化集合,动态大小,快速访问,支持LINQ,类型安全。
使用示例:
标准数组:
Dim numbers(4) As Integer numbers(0) = 10
集合:
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
使用ArrayList相比于List(Of T)可能出现的主要问题是什么?
回答: ArrayList将元素存储为Object,因此在访问元素时需要显式的类型转换(casting),这增加了在运行时发生InvalidCastException的机会。List(Of T)确保在编译阶段有严格的类型检查,避免此类错误。
Dim arrList As New ArrayList() arrList.Add(100) ' Dim s As String = arrList(0) ' 运行时错误 Dim n As Integer = CType(arrList(0), Integer) ' 好
故事
在金融系统中,积极使用标准数组来存储动态大小的数据。当超出预先分配的大小时,数组"被截断",导致在高负载期间丢失交易。
故事
在使用ArrayList时添加字符串和数字到集合中,然后试图计算元素的总和。结果由于类型转换异常,应用程序崩溃,因为无法将字符串与数字相加。
故事
使用集合来存储订单类,但未检查元素的类型。在一个模块中错误地添加了文本而不是订单对象,导致在尝试调用不存在对象的方法时,整个业务逻辑崩溃。