我试图比较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(布尔值)?
答案 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#家伙。不过,上述概念是正确的。