Art*_*Rey 12 .net vb.net boolean nothing
我们来定义这个函数:
Public Function Test(ByVal value As Boolean)
Return "blabla" + If(value = Nothing, "", If(value, "1", "0"))
End Function
Run Code Online (Sandbox Code Playgroud)
我希望它做到以下几点:
Test(True) -> "blabla1"
,Test(False) -> "blabla0"
,Test(Nothing) -> "blabla"
.
问题是Test(Nothing)
返回"blabla0".
Guf*_*ffa 18
甲Boolean
值不能null
(Nothing
),即是可能的值是True
和False
.你需要一个可以为null的值,Boolean?
因为它可以为null.
使用可空值的HasValue
和Value
属性来检查是否有值,并获取值:
Public Function Test(ByVal value As Boolean?)
Return "blabla" + If(Not value.HasValue, "", If(value.Value, "1", "0"))
End Function
Run Code Online (Sandbox Code Playgroud)
Boolean
是值类型,而不是引用类型.因此,Boolean
变量的值永远不会Nothing
.如果您比较Boolean
到Nothing
,VB.NET首先转换Nothing
为一个默认值Boolean
,也就是False
,然后把它比作是.因此,测试以查看Boolean
变量Is Nothing
是否与测试有效,以确定它是否相等False
.如果你需要一个Boolean
可以设置的Nothing
,你需要做一个Nullable(Of Boolean)
.不过,有一条捷径.要使任何值类型为nullable,您只需在类型后面添加一个问号,如下所示:
Public Function Test(ByVal value As Boolean?)
Return "blabla" + If(value.HasValue, If(value.Value, "1", "0"), "")
End Function
Run Code Online (Sandbox Code Playgroud)
正如您将注意到的,即使变量可以为空,您仍然不会通过比较它来测试它是否为null Nothing
.它可能会出乎意料,但Nullable(Of T)
实际上也是一种价值类型.因此,正如我在示例中演示的那样Nothing
,您应该使用它的HasValue
属性,而不是测试它是否存在.