2011-06-09 135 views
5

我想比较VB.NET 2010中的nullable(of boolean)类型的两个变量。其中一个变量的值为False,另一个为Nothing。现在我期待以下表达式评估为真,但情况并非如此:比较可空(布尔值)

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?我应该如何比较两个可空(布尔值)?

+0

显示消息框的正确方法是MSGBOX(“他们是不同的”) – user774411 2011-06-10 10:42:47

回答

19

Nullable.Equals指示两个指定可空(中T)对象是否相等

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

这工作!谢谢。 – Lukasz 2011-06-09 21:42:10

+1

啊,比布尔好多了?废话。 – 2012-01-20 22:33:32

0

我相信可以为空的变量有一个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#人。但上述概念是正确的。

+0

此代码不会做的工作,如果Var1为空,但VAR2具有价值 – Alireza 2011-06-09 19:29:11

2

这是因为在VB.NET

Console.WriteLine(False = Nothing) 

打印True

这与空性无关。

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