Как вывод типов в Visual Basic работает с оператором Equals - PullRequest
0 голосов
/ 23 мая 2019

Я работаю над устаревшим проектом Visual Basic (VB.NET) и включил Option Strict, который генерирует кучу ошибок из-за неявного преобразования.

Я пытаюсь устранить эти ошибки с минимальнымизменение в программе, т.е. явное преобразование в тот же тип, который VB неявно преобразовывал.

Одна из ошибок:

BC30512 Опция Strict On запрещает неявное преобразование из 'String' в 'Double».

Строка кода - это оператор If, проверяющий равенство с помощью оператора Equals.Левый операнд - это Long, а правый операнд - строка.

В конечном итоге, чтобы «исправить» этот пример, один явно опровергнет один из операндов того же типа, что и другой, но какой операнд и какой типнаиболее близко совпадает с тем, что делает VB с Option Strict Off?

На основании ошибки он кажется правильным операндом.В общем, как работает VB, какой операнд выполняет преобразование типа?

Почему он пытается преобразовать строку в Double вместо Long, чтобы соответствовать левому операнду?Левый операнд неявно преобразуется из Long в Double?

Dim l As Long = 123
Dim s As String = "123"

If l = s Then
    ' Do Something
Else
   ' Do the other thing
End If
...