2010-12-07 60 views
1

我想了解爲什麼兩個代碼示例的行爲不同。我一直相信If()函數模仿If語言功能。或者我正在查看導致此問題的Nullable(Of Integer)的行爲?If()函數中可以爲空的整數的默認值

樣品#1:

If Not String.IsNullOrWhiteSpace(PC.SelectedValue) Then 

    Dim pcFilter1 As Integer? = CInt(PC.SelectedValue) 

Else 

    Dim pcFilter1 As Integer? = Nothing 

End If 

樣品#2:

Dim pcFilter2 As Integer? = If(Not String.IsNullOrWhiteSpace(PC.SelectedValue), 
           CInt(PC.SelectedValue), 
           Nothing) 

結果:

pcFilter1 =無

pcFilter2 = 0

回答

7

在示例#2中,您的CInt轉換導致該問題。 If()構造嘗試爲第二個和第三個參數確定一個通用類型。將第二個參數看作一個整數,然後將Nothing轉換爲一個整數,這是由於VB的魔法投射導致結果爲0。

Dim i As Integer = Nothing 'results in i being set to 0 

爲了得到你想要什麼。如果()嘗試以下方法:

Dim pcFilter2 As Integer? = If(Not String.IsNullOrWhiteSpace(PC.SelectedValue), 
          New Integer?(CInt(PC.SelectedValue)), 
          Nothing) 
+0

很好的解釋。謝謝! – motto 2010-12-10 19:38:44