You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET类中数组的正确实现及优化方案咨询

VB.NET类中数组的最优实现方法

原始代码的问题

  • 数组未初始化:myArray仅声明变量但未分配内存,直接访问会抛出NullReferenceException。
  • 数组无Count属性:VB.NET数组的长度属性是Length,Count属于集合类(如List)的属性。
  • 循环内频繁ReDim效率低下:每次ReDim都会重新分配内存,未加Preserve会丢失原有数据,即使加了Preserve也会复制现有元素,性能损耗大。

方案1:使用List(Of T)(最推荐)

List(Of T)是.NET专门为动态集合设计的类型,自带自动扩容逻辑,无需手动管理数组大小,API更丰富简洁,是处理动态元素集合的首选:

Public Class MyClass
    ' 直接初始化List,避免空引用
    Public MyList As New List(Of String)()
End Class

测试代码:

Dim m As New MyClass()
For i = 0 To 9
    ' 直接添加元素,List自动处理扩容
    m.MyList.Add(i.ToString())
    
    ' 若需通过索引赋值,可提前设置容量减少扩容次数(可选)
    ' m.MyList.Capacity = 10
    ' m.MyList(i) = i.ToString()
Next

' 获取元素数量用Count属性
Dim c As Integer = m.MyList.Count

如果实际存储的是子类类型,只需替换Of String为你的子类,比如List(Of YourSubClass),添加元素时直接m.MyList.Add(New YourSubClass())即可。


方案2:提前初始化固定长度数组

如果明确知道需要的元素数量,可在类初始化时直接指定数组长度,避免动态扩容:

Public Class MyClass
    Public MyArray() As String
    
    ' 通过构造函数传入数组长度初始化
    Public Sub New(arraySize As Integer)
        ' 数组索引从0开始,size个元素对应索引0到size-1
        ReDim MyArray(arraySize - 1)
    End Sub
End Class

测试代码:

' 创建实例时指定数组长度为10(对应索引0-9)
Dim m As New MyClass(10)
For i = 0 To 9
    m.MyArray(i) = i.ToString()
Next

' 获取数组长度用Length属性
Dim c As Integer = m.MyArray.Length

方案3:封装数组的动态扩容逻辑

若必须使用数组,可在类内部封装扩容逻辑,简化外部调用:

Public Class MyClass
    Private _myArray() As String
    
    ' 对外提供只读的数组访问
    Public ReadOnly Property MyArray() As String()
        Get
            Return _myArray
        End Get
    End Property

    Public Sub AddItem(item As String)
        If _myArray Is Nothing Then
            ' 初始化为长度1的数组
            ReDim _myArray(0)
            _myArray(0) = item
        Else
            ' 扩容并保留原有元素
            ReDim Preserve _myArray(_myArray.Length)
            _myArray(_myArray.Length - 1) = item
        End If
    End Sub
End Class

测试代码:

Dim m As New MyClass()
For i = 0 To 9
    m.AddItem(i.ToString())
Next

Dim c As Integer = m.MyArray.Length

总结

优先选择List(Of T),它内部已优化扩容策略(默认每次扩容为原容量的2倍),比手动ReDim高效得多,同时提供了添加、删除、查找等便捷方法,大幅简化代码逻辑。

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 11:10:35