vb.net - VB6 到 VB.NET Visual Studio 升级向导讨厌我的一些变量名

标签 vb.net visual-studio vb6-migration

我正在使用升级向导将 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

不会给出编译器错误。

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

最佳答案

我最好的猜测是,它重命名为 Left 以避免与 VB 函数 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 的名称绑定(bind)规则将优先使用成员变量 Left 而不是模块函数 Left。

所以,不完全确定原因,但这可能是为了避免潜在的歧义而过于谨慎。

关于vb.net - VB6 到 VB.NET Visual Studio 升级向导讨厌我的一些变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1275061/

相关文章:

xml - 带有命名空间的 XPath 选择节点

VB.NET 代码将 Excel 2007 列单元格格式更改为数字无十进制

.net - Visual Studio 2010的源代码大纲窗口

vb.net - Microsoft.VisualBasic.dll 中记录的一堆异常

vb.net - 从没有 For Each 循环的 DataTable.Select 中获取第一个结果

c++ - 如何正确安装平台工具集

.net - 在 Visual Studio 2019 上使用 .sass 扩展文件

c# - Visual Basic 6.0 的转换工具比较

vb.net - 什么是 "DefInstance"?我应该将其从 WinForms 应用程序中删除吗?

c# - 选中列表框,其中每个项目都有数据值属性?