vb.net布尔值与零
让我们定义这个函数:vb.net布尔值与零,.net,vb.net,boolean,nothing,.net,Vb.net,Boolean,Nothing,让我们定义这个函数: Public Function Test(ByVal value As Boolean) Return "blabla" + If(value = Nothing, "", If(value, "1", "0")) End Function 我希望它执行以下操作: Test(True)->“blabla1”,Test(False)->“blabla0”,Test(Nothing)->“blablabla” 问题是,Test(Nothing)返回“blabla0”。
Public Function Test(ByVal value As Boolean)
Return "blabla" + If(value = Nothing, "", If(value, "1", "0"))
End Function
我希望它执行以下操作:
Test(True)->“blabla1”
,Test(False)->“blabla0”
,Test(Nothing)->“blablabla”
问题是,
Test(Nothing)
返回“blabla0”。在对Nothing进行测试时,需要使用is关键字,但无法将值作为布尔值传递,因为它只对引用类型有效
If( value Is Nothing, "", If( value, "1", "0" ) )
还值得注意的是,如果不是引用类型,则默认值不为默认值
如果您想这样做,您可以更改签名以期望对象而不是布尔值。布尔值决不能为
null
(无
),可能的值为真
和假
。您需要一个可为null的值,一个布尔值?
,它才能为null
使用可空值的HasValue
和Value
属性检查是否存在值,并获取值:
Public Function Test(ByVal value As Boolean?)
Return "blabla" + If(Not value.HasValue, "", If(value.Value, "1", "0"))
End Function
Boolean
是值类型,而不是引用类型。因此,Boolean
变量的值永远不能是Nothing
。如果将布尔值
与无
进行比较,VB.NET首先将无
转换为布尔值
的默认值,即假
,然后将其与该值进行比较。因此,测试Boolean
变量是否为空
实际上与测试它是否等于False
相同。如果您需要一个布尔值
,可以设置为无
,则需要将其设置为可空(布尔值)
。不过,这有一条捷径。要使任何值类型都可以为null,只需在类型后添加一个问号,如下所示:
Public Function Test(ByVal value As Boolean?)
Return "blabla" + If(value.HasValue, If(value.Value, "1", "0"), "")
End Function
您会注意到,即使变量可以为null,您仍然不会通过将其与
Nothing
进行比较来测试它是否为null。这可能会让人惊讶,但是Nullable(Of T)
实际上也是一种值类型。因此,与其测试它是否为Nothing
,不如使用它的HasValue
属性,正如我在示例中演示的那样。对3个值使用布尔值是个坏主意。考虑改变MeoDoI并不意味着使用它3个值,我只是从数据库中获得布尔值,我只是处理拉拽的情况。failed@Arty:要从数据库结果中检查空值,请检查值(类型为对象
,而不是布尔值
)是否为DBNull
,或者使用DataReader.IsDBNull
方法。您正在考虑C#或Java的空术语。在该上下文中有三个值-True、False或Null(类似于三态复选框)。然而,在VisualBasic中,任何东西都不是这样工作的。在VB中,False在布尔值的上下文中为Nothing。类似地,String.Empty在字符串的上下文中也不是什么。这很令人困惑,但答案并不等同于C#或Java.Ty中的null,但我更喜欢在不需要时避免强制转换。无论如何,投票结果都是上升的;)在看到其他解决方案后——我不怪你,它们更干净。