У меня есть приведенные ниже операторы IF, опробованные как на VB6, так и на VB.net.
Dim str As String = ","
If str = "," Or str = "," Or str = """" Then
'execute A
End If
Если значение str равно «,» (запятая полной ширины), на VB6 A не выполняется, а на VB.net он переходит в оператор IF и казнит А.
Странно то, что я поставил этот оператор на наблюдение, когда str = ",", 「 str = "," Или str = "," Или str = """" 」 он возвращает false, но все равно входит в оператор IF для выполнения A.
Кто-нибудь знает, почему это происходит?
Я попробовал перейти с Or на orElse и убедился, что Опция Explicit On есть, но результат тот же. Я все еще новичок в VB.net, поэтому мне может не хватать основы, поэтому любая помощь очень ценится.
Обновлено: я добавил значение str в образец кода.
@tim, в том-то и дело, я пробовал воспроизвести код в онлайн-компиляторах (точно такой же, как у тебя), но он работает отлично. Я не уверен, что мне нужно разобраться, это проблема окружающей среды или проблема настроек. Есть ли еще какие-нибудь вещи, которые могут повлиять на его работу?
Но вы даже не предоставляете соответствующий код. Вы говорите, что проблема в ",", но в вашем коде это пустая строка. Скопируйте и вставьте сюда строковое значение из отладчика. Про "странную вещь" мне тоже непонятно. Этот код не имеет никакого смысла.
Простите за неточность, но код точно такой же, как ваш. str — это параметр другого метода, поэтому я просто упустил шанс указать его в своем вопросе.
В вашем вопросе теперь другая запятая, чем в моей скрипте .net. Важно скопировать и вставить значение из отладчика, а не просто гадать, что это такое. Вы уверены, что код выполняется в If или это просто так выглядит? Возможно, вы работаете в режиме выпуска, а не в режиме отладки.
@tim Я уже добавил значение в пример кода. Я также только что понял, что значение, которое вы использовали в скрипке, представляет собой запятую половинной ширины с одним пробелом «,», но значение, которое я использовал, было запятой полной ширины «,». И я не знаю, как еще объяснить эту странную вещь, это то же самое, что я написал в посте: даже когда уравнение возвращает ложное значение, код в операторе If все равно выполняется, и я не понимаю, почему.
Я запускаю его в режиме отладки.





Параметр «Сравнить текст» вызовет это.
Option Compare Text
Imports System
Public Module Demo
Public Sub Main()
Console.WriteLine("," = ",")
End Sub
End Module
Истинный
Вам следует отключить его на уровне проекта.
Это решило проблему! Теперь я понимаю! Большое спасибо!
Вы должны предоставить код, который позволит нам воспроизвести проблему: dotnetfiddle.net/kPfOpR