2010-12-07 62 views
1

J'essaie de comprendre pourquoi les deux échantillons de code se comportent différemment. J'ai toujours cru que la fonction If() imitait la fonction If. Ou est-ce que je regarde un comportement de Nullable (Of Integer) qui cause cela?Valeur par défaut de l'entier nullable différente dans la fonction If()

Exemple n ° 1:

If Not String.IsNullOrWhiteSpace(PC.SelectedValue) Then 

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

Else 

    Dim pcFilter1 As Integer? = Nothing 

End If 

Exemple # 2:

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

Résultat:

pcFilter1 = Nothing

pcFilter2 = 0

Répondre

7

Dans l'exemple 2, votre distribution CInt est à l'origine du problème. La construction If() essaie de déterminer un type commun pour les 2ème et 3ème paramètres. En voyant le second paramètre sous la forme d'un nombre entier, il convertit alors Nothing en un nombre entier, ce qui, en raison de la conversion magique en VB, donne 0. Par ex.

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

obtenir ce que vous voulez avec Si() procédez comme suit:

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

bien expliqué. Je vous remercie! – motto