ReDim后初始化数组(无需保留数据)的更优实现方法咨询
不同开发环境下的优化方案
你当前的写法逻辑是完全正确的,无Preserve关键字的ReDim本身就会直接分配新数组、丢弃旧数据,没有额外的内存拷贝开销,符合你不需要保留原有数据的需求。针对不同的VB语言环境,可以进一步简化代码:
VB.NET 环境
可以直接用LINQ语法一步完成数组的声明、分配、初始化,省去手动写循环的步骤,运行效率和手动循环完全一致:
' 长度为5,下标范围0~4,对应你原写法的ReDim Test(4) Dim Test As MyObject() = Enumerable.Range(0, 5).Select(Function(i) New MyObject()).ToArray()
如果确实需要先分配数组再单独初始化,你现有写法已经是最优实现,没有优化空间。
VB6/VBA 环境
没有内置语法糖可以省略循环,你现有写法已经是性能最优的实现。如果想简化重复编码的工作量,可以封装通用初始化函数复用逻辑:
' 通用数组初始化函数 Function InitObjectArray(ByVal elementCount As Integer, ByVal classFullName As String) As Object() Dim arr() As Object, i As Integer ReDim arr(elementCount - 1) For i = 0 To UBound(arr) Set arr(i) = CreateObject(classFullName) Next InitObjectArray = arr End Function ' 调用示例 Dim Test() As MyObject Test = InitObjectArray(5, "你的工程名.MyObject")
注意:VB6/VBA中没有数组的
Count()方法,需要替换为UBound(Test)获取数组最大下标。
内容的提问来源于stack exchange,提问作者jocoder
相关产品推荐
相关产品推荐

