4

我正在使用升级向导将 VB6 项目升级到 VB.NET。我知道这会让我很伤心,但我正在努力使旧应用程序可用。如果我有时间,我会重写它,但我目前正在完成暑期实习,并希望得到一些工作。

向导正在做的一件我找不到任何理由的事情是重命名随机变量。例如:

Structure ctrObj
    Dim Name As String
    Dim Index As Integer
    Dim Top As Integer
    'UPGRADE_NOTE: Left was upgraded to Left_Renamed. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'
    Dim Left_Renamed As Integer
    Dim Height As Integer
    Dim width As Integer
    Dim ScaleHeight As Integer
    Dim ScaleWidth As Integer
End Structure

对于我的生活,我不明白为什么这会改变。据我所知,它不是保留名称,在范围内我找不到其他名为 left 的变量,重命名它不会产生编译器错误。

'UPGRADE_NOTE: Left was upgraded to Left_Renamed. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'
    Dim Left_Renamed As Integer

变成

Dim Left As Integer

不会给出编译器错误。

它对整个项目中看似随机的变量执行此操作。任何人都知道为什么它不喜欢我的一些变量名?

4

3 回答 3

4

我最好的猜测是它正在重命名 Left 以避免与 VB Function Left 混淆。这是命名空间中模块上的一种方法,默认导入到每个 VB.Net 项目中。因此,它是全球可用的。

例如:这编译得很好

Dim x = Left("here", 1)

如果函数在没有参数的情况下使用,可能会担心会出现歧义错误。例如

Public Structure S1
  Public Left As Integer
  Public Sub Method1()
    Dim x = Left
  End Sub
End Structure

然而,由于几个原因,这不可能发生。主要是 VB 的名称绑定规则将优先使用成员变量 Left 而非 Module Function Left。

因此,不完全确定原因,但避免潜在的歧义可能过于谨慎。

于 2009-08-13T22:54:01.900 回答
1

Left是 Visual Basic 中的字符串函数。它从字符串的左侧获取指定数量的字符并返回包含这些字符的新字符串。

于 2009-08-13T22:54:21.477 回答
1

VB6 x$ = left$("hello world",5) 打印 x$ hello

VB2005,8,9 与 VB6

 left = left$
 right = right$
 mid   = mid$
 trim  = trim$
 chr(13)+chr(10) = Chr$(32)+ Chr$(10) (line feed + carriage return)

left 是保留字,会产生错误,因此转换程序会以您知道已更改的方式对其进行更改。

于 2012-01-17T19:44:36.940 回答