比较可空布尔值类型(Nullable<Boolean>)

9

我在尝试比较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?如何比较两个布尔值的可空类型?

1
显示消息框的正确方法是 MsgBox("它们不同")。 - user774411
3个回答

27
您可以使用 Nullable.Equals 方法:

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

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

1
啊,比布尔值好多了吧?那些都是废话。 - Jeff B

5
这是因为在VB.NET中。
Console.WriteLine(False = Nothing)

输出True

这与可空性无关。


-1

我相信可空变量拥有Value和HasValue属性。http://msdn.microsoft.com/zh-cn/library/19twx9w9(v=VS.80).aspx

基本上,你需要这样说:

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

我已经很久没有写VB了,通常我是C#的人。不过上面的概念是正确的。


2
如果 var1 为空,但 var2 有值,则此代码将无法完成工作。 - Alireza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接