2 votes

Fonction générique VB.NET permettant de vérifier la présence d'une valeur nulle

J'essaie d'écrire une fonction générique qui vérifiera chaque paramètre de la base de données pour voir s'il est nul, et si c'est le cas, retournera DBNull ; sinon, retournera l'objet.

Voici donc ma fonction :

Public Shared Function CheckForNull(ByVal obj As Object) As Object
    If obj <> Nothing Then Return obj Else Return DBNull.Value
End Function

Mon problème est que certains des objets que je passe à la fonction sont nullables. Je peux donc transmettre à la fonction un Long ? ou un Int ?, mais lorsqu'un type nullable est transmis à la fonction, il est converti en son type de valeur. Ainsi, si je passe un Long ? qui a une valeur de 0, la fonction renvoie DBNull parce que le Long ? est converti en Long et qu'une valeur de 0 pour un Long est équivalente à Rien. Est-il possible de faire en sorte que cette fonction fonctionne également pour les types Nullables ?

Sinon, je me contenterai d'utiliser les déclarations suivantes au lieu d'un appel de fonction générique :

IIf(nullableVar.HasValue, nullableVar, DBNull.Value))

et

IIf(nonNullableVar IsNot Nothing , nonNullableVar, DBNull.Value))

2voto

Bill Points 2550

Ce n'est pas pour cela que votre logique est défaillante. Lors de l'évaluation d'une expression telle que (x=y) ou (x<>y), si l'un des arguments est Rien, VB.Net renvoie FALSE. Votre conditionnel passe toujours par la clause ELSE. Ainsi, au lieu de :

if obj <> Nothing then

Essayez plutôt ceci :

if obj isnot nothing then

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X