2010-12-07 13 views
1

2つのコードサンプルが異なる動作をする理由を理解しようとしています。私はいつもIf()関数がIf言語の機能を模倣すると信じていました。または、これを引き起こしているNullable(Of Integer)の動作を見ていますか?If()関数で異なるnull可能な整数のデフォルト値

サンプル#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()構造体は、2番目と3番目のパラメータの共通型を決定しようとします。 2番目のパラメータを整数として見ると、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

関連する問題