VB6 to VB.NET Мастер обновления Visual Studio ненавидит некоторые из моих имен переменных

Я обновляю проект 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

Для жизни меня я не понимаю, почему это меняется налево. Насколько я могу судить, это не зарезервированное имя, нет другой переменной с именем, которую я могу найти в области видимости, и ее переименование не создает ошибки компилятора.

'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

не выдает ошибку компилятора.

Он делает это с, казалось бы, случайными переменными в моем проекте. У кого-нибудь есть идеи, почему ему не нравятся некоторые из моих имен переменных?


person user142350    schedule 13.08.2009    source источник
comment
Из документации: В некоторых случаях переменная должна быть переименована, потому что исходное имя конфликтует с зарезервированным словом. Например, переменная Day будет переименована в Day_Renamed; Day не было зарезервированным именем в Visual Basic 6.0, но оно есть в Visual Basic 2008.   -  person R.J. Dunnill    schedule 05.08.2019


Ответы (3)


Я думаю, что это переименование 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 предпочтут переменную-член Left, а не функцию модуля Left.

Итак, не совсем уверен, почему, но, вероятно, это чрезмерная осторожность, чтобы избежать потенциальной двусмысленности.

person JaredPar    schedule 13.08.2009
comment
Имеет смысл, хотя это очень раздражает. Он также делает это с переменной под названием logger — есть ли какой-то импортированный по умолчанию метод под названием Logger? - person user142350; 14.08.2009

Left — это строковая функция в Visual Basic. Он берет указанное количество символов с левой стороны строки и возвращает новую строку, содержащую эти символы.

person Robert Harvey    schedule 13.08.2009

VB6 x$ = left$("привет мир",5) напечатать x$ привет

VB2005,8,9 vs VB6

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

left является резервным словом и будет генерировать ошибки, поэтому программа преобразования изменяет его таким образом, что вы знаете, что оно было изменено.

person Bob Komjathy    schedule 17.01.2012