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

VB.NET中数组在Sub过程使用报错:Redim语句需要数组

解决“Redim statement requires an array”错误的方案

咱们来一步步拆解你遇到的问题,这个报错主要是几个细节处理不当导致的:

错误的核心原因

  • 参数命名冲突:你把参数命名为Array,这可是VB.NET的关键字,编译器很容易混淆,绝对不能这么用。
  • 参数类型不匹配:你用Array As Array传递的是.NET的Array基类对象,而ReDim需要直接操作具体的数组变量(比如String(,)这种二维字符串数组),不是这个抽象的基类。
  • 数组传递方式错误:要修改数组的大小(用ReDim),必须用ByRef传递参数,不然过程里修改的只是副本,还会触发类型不匹配问题。

修正后的代码示例

第一步:调整公共类的数组声明

把固定大小的数组改成动态二维数组(一开始不指定大小,方便后续ReDim调整):

Public TstukkenArray(,) As String ' 动态二维字符串数组,未指定初始大小

第二步:重写填充数组的Sub过程

' 从DataSet加载数据到二维字符串数组
Sub LoadDataToArray(ds As DataSet, tableName As String, ByRef targetArray(,) As String)
    ' 获取目标DataTable
    Dim dt As DataTable = ds.Tables(tableName)
    If dt Is Nothing OrElse dt.Rows.Count = 0 Then
        ' 空表时重置数组
        ReDim targetArray(1, 0)
        Return
    End If

    ' 定义计数器
    Dim i As Integer, j As Integer

    ' 重新定义数组大小:第一维对应列数,第二维对应行数
    ' 注意:ReDim Preserve 仅能修改多维数组的最后一维,如需保留原有数据要注意维度顺序
    ReDim targetArray(dt.Columns.Count - 1, dt.Rows.Count - 1)

    ' 遍历DataTable填充数组
    For i = 0 To dt.Rows.Count - 1
        For j = 0 To dt.Columns.Count - 1
            targetArray(j, i) = dt.Rows(i)(j).ToString()
        Next
    Next
End Sub

第三步:调用过程示例

' 假设你已经有了初始化好的DataSet实例ds
LoadDataToArray(ds, "你的目标表名", TstukkenArray)

额外注意事项

  • 多维数组的ReDim Preserve限制:如果需要保留原有数据,ReDim Preserve只能修改多维数组的最后一个维度。比如你的数组是(列数, 行数),修改行数(最后一维)可以用Preserve,但修改列数则无法保留数据。
  • 避开关键字命名:永远不要用VB.NET的关键字(比如Array、String、Integer)作为变量名或参数名,这会让编译器产生混淆,引发各种奇怪的错误。

内容的提问来源于stack exchange,提问作者Fyer-Zero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:15:44