Dot-Net

vb.net 布爾值和無

  • December 10, 2015

讓我們定義這個函式:

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),可能的值是TrueFalse。您需要一個可為空的值 a Boolean?,它才能為空。

使用可空值的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屬性,而不是測試它是否為 ,正如我在範例中所展示的那樣。

引用自:https://stackoverflow.com/questions/19931669