Как повлиять на логическое значение результата логического? выражение

Вы не проверяете, имеют ли в вашем результирующем наборе какие-либо данные или строку.

ResultSet rs = stmt.executeQuery();
rs.next();
...
...

Вы должны проверить, является ли ваш результат пустым или имеет любую строку:

ResultSet rs = stmt.executeQuery();
if(rs.next()){
.....
your code
.....
}
1
задан MatSnow 17 January 2019 в 09:20
поделиться

3 ответа

Вы можете использовать GetValueOrDefault -метод:

Dim a As Boolean?
Dim b As Boolean = a.GetValueOrDefault()
0
ответ дан MatSnow 17 January 2019 в 09:20
поделиться

Вы также можете использовать CBool

Dim a As Boolean?
Dim b As Boolean = CBool(a = True)
0
ответ дан preciousbetine 17 January 2019 в 09:20
поделиться

Вы должны быть осторожны с различиями между 0, Nothing и vbNull. 0 является значением по умолчанию для логического значения. vbNull - это зарезервированное значение Null, которое должно переводиться как 1. Ничто не вызовет исключение почти во всех обстоятельствах.

Dim a As Boolean? = Nothing
Dim b As Boolean? = vbNull
Dim c As Boolean = vbNull
Dim d As Boolean

Print(a = True) 'will throw an Exception
Print(b = True) 'will return True (as vbNull = Int(1))
Print(c = True) 'will return True as the ? is unnecessary on a Boolean as vbNull = Int(1)
Print(d = True) 'will return False as the default value of a Boolean is 0
Print(a.GetValueOrDefault) 'will return False as this handles the Nothing case.

При работе с неназначенными значениями вы должны всегда сначала проверять Nothing (или просто следовать хорошей практике и устанавливать значение перед использованием).

    Dim a As Boolean?
    Dim b As Boolean = IIf(IsNothing(a), False, a)

Это вернет False, если a - Nothing, иначе вернет A.

Только после проверки на Nothing вы можете проверить на vbNull, поскольку Nothing возвращает ошибку для всех значений. Код ниже вернет False, если Nothing, или vbNull, или как-то иначе.

    Dim a As Boolean?
    Dim b As Boolean = IIf(IsNothing(a), False, IIf(a = vbNull, False, a))

Примечание: вы не можете использовать приведенный ниже код, так как тест a = vbNull будет против Ничего, которое вызовет исключение.

Or(IsNothing(a), a = vbNull) 

Я бы также не стал использовать GetValueOrDefault в любом реальном приложении, так как при использовании более сложных типов данных значение по умолчанию не будет таким простым и вы можете получить неожиданные результаты. ИМХО гораздо лучше проверить на IsNothing (или Object = Nothing, Object Is Nothing), чем полагаться на причуды типа данных.

Лучшей практикой было бы убедиться, что a имеет значение, что вы можете сделать, используя

    Dim a As Boolean? = New Boolean()
    Dim b As Boolean = a

Причина, по которой я говорю, что это лучшая практика, заключается в том, что для всех классов, а не только логические. Отмечено, что это логично для логических выражений.

Надеюсь, это поможет.

0
ответ дан krizcillz 17 January 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: