J'essaye d'écrire une fonction générique qui vérifiera chaque paramètre de base de données pour voir si elle est nulle, et si c'est le cas, retourner DBNull; sinon, renvoie l'objet.Fonction générique VB.NET pour vérifier une valeur de null
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 je passe à la fonction sont Nullable. Donc, je peux passer la fonction un long? ou Int ?, mais lorsqu'un type Nullable est passé à la fonction, il est converti en son type de valeur. Donc, si je passe un long? qui a une valeur de 0, la fonction renvoie DBNull parce que le long? est converti en Long et une valeur de 0 pour un Long équivaut à Nothing. Y a-t-il un moyen de faire fonctionner cette fonction pour les types Nullable?
Sinon, je vais revenir à l'aide des instructions suivantes au lieu d'un appel funciton générique:
IIf(nullableVar.HasValue, nullableVar, DBNull.Value))
et
IIf(nonNullableVar IsNot Nothing , nonNullableVar, DBNull.Value))
Merci pour votre intervention. En tant que développeur C# ayant à écrire VB.NET, je suis toujours aux prises avec la manipulation correcte de 'Nothing'. La modification de '<>' en 'IsNot' résout le problème. Cependant, j'ai un problème avec la réponse en cela, mon évaluation originale 'obj <> Nothing' fonctionne dans tous les cas, sauf lors de la comparaison d'un type de valeur nullable qui a une valeur de zéro contre rien. Lorsque je passe une chaîne à la fonction qui n'est pas rien, la fonction renvoie correctement la chaîne. –
Est-ce que l'opérateur '<> convertit un type de valeur nullable en un type de valeur normal, et c'est pourquoi lorsque le type de valeur a la valeur 0, la comparaison échoue et renvoie DBNull? –
Il y a probablement une conversion implicite en cours. M $ aime "nous" aider les programmeurs VB Wimpy. Je mets toujours Option Strict On comme première ligne de n'importe quel fichier de code pour empêcher ce genre de comportement inattendu. – Bill