il travaille en VB 2005 (dotnet 2.0), mais il est laid.
Vous ne pouvez pas l'utiliser comme une variable normale, je pensais que cela pourrait fonctionner comme un type d'objet, mais ce n'est pas le cas.
Plutôt que ceci:
dim oInt as object
dim i as integer
if oInt is nothing then
msgbox("int is null")
else
i = cint(oInt)
end if
vous avez ce.
Dim oInt as nullable(of integer)
dim i as integer
if oInt.HasValue = false then
msgbox("int is null")
else
i = oInt.Value
end if
Le problème ici est que si votre variable est nulle et il vous arrive d'invoquer la propriété de la valeur, il vomit jusqu'à une exception non gérée. Par exemple, mon préféré est celui-ci:
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, iif(oInt.HasValue, oInt.Value, DBNull.value))
Vous obtiendrez une erreur d'exécution lorsque votre valeur Nullable supposée est nulle !!!
donc ici est annulable (integer) vs code objet
annulable (integer)
if oInt.HasValue then
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, oInt.Value)
else
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, dbnull.value)
end if
objet
AddParamToSQLCmd(sqlCmd, "@SomeID", SqlDbType.Int, 0, ParameterDirection.Input, oInt)
L'équivalence nulle et la boxe ont fonctionné en VB 2005. Les changements en 2008 se sont concentrés sur l'ajout du "?" syntaxe, et la mise en œuvre de l'opérateur de levage. Une chose à noter, cependant, est ce soutien pour le "?" La syntaxe n'a pas été ajoutée au modèle de code/Code DOM VS Code. Par conséquent, tout code généré par un concepteur qui utilise des types Nullable utilisera toujours l'ancienne syntaxe générique. –