VB.NET рассматривает True / False как целое число - PullRequest
1 голос
/ 21 января 2011

Как получается, что IntelliSense и компилятор принимает If 3 = True Then ... в VB.NET?Даже с Option Strict on.

В действительности ли это логическое выражение, как булевы, как целые числа, или в чем же дело?

Ответы [ 4 ]

3 голосов
/ 21 января 2011

Из MSDN, Логический тип данных (Visual Basic) :

Когда Visual Basic преобразует значения числового типа данных в логический, 0 становится ложным, а все остальные значения становятся истинными.

Таким образом, любое число, преобразованное в логическое значение, оценивается как True, кроме 0.

2 голосов
/ 21 января 2011

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

If -3 = True Then
1 голос
/ 21 января 2011

Любое ненулевое целочисленное значение = Boolean True.

Сравнения целых значений могут использоваться в логических выражениях.

0 голосов
/ 23 января 2011

@ Oded "L - наверное, это потому, что VB6 / VBA ведут себя так, и разработчики привыкли к этим языкам в своей счастливой зоне. - Oded 2 дня назад"

На самом деле, я понимаю ситуацию так, что Visual Basic 6.0 и VBA были в разногласии с остальным сообществом программистов в их обработке логических выражений, в том что для этих двух языков -1 = true. Переход к «любому значению, отличному от 0 = true», был сделан для обратной совместимости.

Я считаю, что для большей части мира важным оператором является 0 = false. Любое значение, отличное от 0, принимает значение true.

Хотя во многих случаях я держу пари, что стандарты таковы, что 0 = ложь и 1 = истина. Когда Microsoft занималась разработкой VB.NET, им нужно было сохранять обратную совместимость для удержания -1 = true из Visual Basic 6.0 / VBA. Таким образом, они пошли с True = <> 0. Таким образом, 1 или -1 будет принимать значение true. Это кажется более понятным для реализации, чем более сложный условный оператор, который охватывает оба случая: 1 или -1. То, с чем они приземлились, по сути, является прямой проверкой оценки любого значения, отличного от 0.

Если подумать, это также согласуется с базовыми двоичными понятиями. Переключатель включен (некоторое значение, кроме 0) или выключен (значение ноль).

...