Обнуляемый объект должен иметь значение VB - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть блок кода большего размера, который я воссоздал в этом более простом примере:

    Dim evalcheck As Boolean
    Dim aEntityId, bEntityId As Integer?
    Dim aCheckNumber, bCheckNumber As Integer?

    aEntityId = Nothing
    bEntityId = Nothing
    aCheckNumber = Nothing
    bCheckNumber = Nothing
    evalcheck = aEntityId = bEntityId And aCheckNumber = bCheckNumber

Я получаю обнуляемый объект, который должен иметь значение, когда я сравниваю пары Nothing и Nothing.

Isесть быстрое решение для eval части -

evalcheck = aEntityId = bEntityId And aCheckNumber = bCheckNumber

1 Ответ

0 голосов
/ 06 декабря 2011

Вы должны действительно использовать скобки для удобства чтения. Даже тогда сравнение уродливо.

If ((aEntityId IsNot Nothing And bEntityId IsNot Nothing) AndAlso (aEntityId = bEntityId)) Or (aEntityId Is Nothing And bEntityId Is Nothing) Then
    If ((aCheckNumber IsNot Nothing And bCheckNumber IsNot Nothing) AndAlso (aEntityId = bEntityId)) Or (aCheckNumber Is Nothing And bCheckNumber Is Nothing) Then
        evalcheck = True
    Else
        evalcheck = False
    End If
Else
    evalcheck = False
End If

Я предпочитаю этот метод лучше, хотя

Private Function NullableIntsEqual(ByVal a As Integer?, ByVal b As Integer?) As Boolean
    If ((a IsNot Nothing And b IsNot Nothing) AndAlso (a = b)) Or (a Is Nothing And b Is Nothing) Then
        Return True
    Else
        Return False
    End If
End Function

Ваша строка проверки становится

evalcheck = NullableIntsEqual(aEntityId, bEntityId) And NullableIntsEqual(aCheckNumber, bCheckNumber)
...