比较nullable(布尔值)

时间:2011-06-09 19:03:05

标签: vb.net nullable

我试图比较VB.NET 2010中类型nullable(of boolean)的两个变量。其中一个变量的值为False,另一个变量为Nothing。现在我期待以下表达式评估为true,但事实并非如此:

Dim var1 as nullable(of boolean) = False
Dim var2 as nullable(of boolean)
var2 = Nothing

If var1 <> var2 Then
 msgbox "they are different"
End If

为什么我看不到我的MsgBox?我应该如何比较两个nullables(布尔值)?

4 个答案:

答案 0 :(得分:24)

您可以使用Nullable.Equals

  

指示两个指定的Nullable(Of T)个对象是否相等。

If Not Nullable.Equals(var1, var2) Then
    MsgBox("they are different")
End If

答案 1 :(得分:2)

这是因为在VB.NET中

Console.WriteLine(False = Nothing)

打印True

这与可空性无关。

答案 2 :(得分:2)

您还可以创建一个可以比较它们的功能。

Function compareNullableBooleans(ByVal firstBool As Nullable(Of Boolean), _
                                 ByVal secondBool As Nullable(Of Boolean))
    If firstBool.HasValue And secondBool.HasValue Then
        Return (firstBool = secondBool)
    ElseIf firstBool.HasValue And secondBool.HasValue = False Then
        Return False
    ElseIf firstBool.HasValue = False And secondBool.HasValue = True Then
        Return False
    Else
        Return True
    End If
End Function

这应该按照你想要的方式工作,不过我建议你更改函数的名称,因为它很长:p

答案 3 :(得分:-1)

我相信可以为null的变量具有Value和HasValue属性。 http://msdn.microsoft.com/en-US/library/19twx9w9(v=VS.80).aspx

基本上你不得不说:

If (var1.HasValue And var2.HasValue) And (var1.Value <> var2.Value) Then
      '
End If

自从我写VB以来已经有一段时间了。我通常是一个C#家伙。不过,上述概念是正确的。