Dot-Net
vb.net 布爾值和無
讓我們定義這個函式:
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) -> "blabla"問題是
Test(Nothing)返回“blabla0”。
一個
Boolean值永遠不能是null(Nothing),可能的值是True和False。您需要一個可為空的值 aBoolean?,它才能為空。使用可空值的
HasValueandValue屬性檢查是否有值,並獲取該值:Public Function Test(ByVal value As Boolean?) Return "blabla" + If(Not value.HasValue, "", If(value.Value, "1", "0")) End Function
Boolean是值類型,而不是引用類型。因此,Boolean變數的值永遠不會是Nothing。如果將 aBoolean與進行比較Nothing,VB.NET 首先將轉換Nothing為 a 的預設值Boolean,即False,然後將其與該值進行比較。因此,測試變數是否與測試Boolean變數Is Nothing是否相等實際上是相同的False。如果你需要一個Boolean可以設置為的Nothing,你需要把它設為一個Nullable(Of Boolean)。不過,有一條捷徑。要使任何值類型可以為空,您只需在類型後添加一個問號,如下所示:Public Function Test(ByVal value As Boolean?) Return "blabla" + If(value.HasValue, If(value.Value, "1", "0"), "") End Function您會注意到,即使變數可以為空,您仍然不會通過將其與
Nothing. 這可能令人驚訝,但Nullable(Of T)實際上也是一種值類型。因此,Nothing您應該使用它的HasValue屬性,而不是測試它是否為 ,正如我在範例中所展示的那樣。