2011-06-09 88 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