更新:2007 年 11 月
在 Visual Basic 6.0 中可以定义具有任意整数下限和上限的数组。还可以使用 ReDim 将变量重新指定为数组。为提供与其他语言之间的互操作性,Visual Basic 2008 中数组的下限必须是零,且除非以前曾用 Dim 关键字声明了数组变量,否则不能使用 ReDim。尽管这限制了定义数组的方式,但使您可以在 Visual Basic 2008 和其他任何 .NET Framework 语言之间传递数组。下面的示例显示了这种限制:
'BAD: LBound must be 0
Dim a(1 To 10) As Integer
'BAD: Can't use ReDim without Dim
ReDim v(10)
'OK: Creates an array of 11 integers
Dim b(10) As Integer
'OK: Can ReDim previously Dimed variable
ReDim b(5) As Integer
副作用是 Option Base 语句将从语言中移除。
在项目升级到 Visual Basic 2008 后,将从代码中移除所有 option base 语句。如果数组的界限是零,则将不对其进行更改。但是,如果数组的界限非零,那么会移除下限并向代码中插入警告,如下面的示例所示:
Dim a(1 To 10) As Integer
更改为:
' UPGRADE_WARNING: Lower bound of an array was changed from 1 to 0.
Dim a(10) As Integer
在许多情况下,升级的代码将如以前一样工作。但是,如果应用程序逻辑依赖的下限为 1,那么需要进行一些修改。Dim、ReDim 和 LBound 语句标记有警告以帮助您查看所做的更改。
因此,应在 Visual Basic 6.0 代码中使用零界限数组,避免将 ReDim 用作数组声明,并避免使用 Option Base 1。