J'essaie de vérifier si une variable a été définie comme Guid nulable. par exemple.VB.NET: Vérification si la variable est de Guid? (nullable) type
Dim myGuid As Nullable(Of Guid)
ou Dim myGuid As Guid?
Il semble faire un myGuid.GetType
renvoie le sous-jacents de type, qui est le type Guid, pas guid ?. Donc tester myGuid.GetType Is GetType(Guid?)
retourne toujours False.
Comment puis-je savoir si myGuid est un type Nullable?
Ed: Je peux faire ce qui suit, qui renvoie correctement True pour "Guid?" et False pour « Guid »:
Not Nullable.GetUnderlyingType(GetType(Guid?)) Is Nothing
Le problème est que je ne sais pas comment récupérer le type nullable de la variable elle-même, afin de le tester. J'ai seulement pu obtenir le type de système sous-jacent (non-nullable).
Ed: Explication des raisons pour lesquelles j'ai besoin de savoir. :)
J'ai écrit une fonction d'assistance db. Je lui passe un objet composé de membres publics, représentant les données de ligne d'une table. Les membres sont les colonnes de la table. En utilisant la réflexion, je parcours ces membres publics pour créer une instruction INSERT pour un objet de commande et remplir ses paramètres avec les valeurs de ces membres. Jusqu'ici tout va bien.
Mais maintenant il y a une table qui a une colonne uniqueidentifier que je dois pas remplir à partir de l'objet ligne, comme par défaut "NEWID()" (en utilisant SQL Server 2008). Au lieu de sauter toutes les colonnes Guid, ce qui serait facile, je veux seulement ignorer celles définies dans la classe de données de la ligne comme "Guid" (non nullable).
Fondamentalement, j'utilise le Guid? (Nullable) pour indiquer que vous pouvez remplir cette colonne uniqueidentifier avec des données. Si elle est non-nullable, cela me dit de l'ignorer car la colonne a une valeur par défaut NEWID().
Espérons que cela a du sens. S'il y a une meilleure façon de savoir quelles colonnes à ignorer et celles à remplir, je serais impatient de savoir. C'est juste une approche que je pensais être faisable.
Vous pourriez utiliser un attribut à la place? Marquez la méthode identificateur avec un attribut personnalisé pour indiquer qu'elle doit être ignorée – MarkJ
@MarkJ, la classe de données de ligne est juste un groupe de membres publics, par exemple. 'Public ClientFirstName As String'. Le nom du membre reflète le nom de la colonne db. Existe-t-il un moyen d'ajouter des attributs spéciaux à un membre de la classe, dans le code, auquel on peut accéder par réflexion? –
Oui, voir ces liens http://msdn.microsoft.com/en-us/library/71s1zwct.aspx et http://msdn.microsoft.com/en-us/library/z919e8tw.aspx – MarkJ