.NET DBNull vs Rien à travers tous les types de variables?
Je suis un peu confus sur les valeurs null et variables .NET. (VB préféré)
Est-il possible de cocher la case "nullness" de chaque variable indépendamment de savoir si c'était un objet ou d'un type de valeur? Ou est-ce que mon null vérifiez toujours prévoir si c'est le contrôle d'un type de valeur (p. ex. Système.Entier) ou un objet?
Je crois que je suis à la recherche d'une fonction qui vérifie toutes sortes de nullité". C'est, n'importe quel type de variables que
a) n'ont jamais été affecté une valeur, depuis, déclaré
b) ont été assignés à une valeur nulle à partir d'un objet de données (ce qui est arrivé à partir d'une base de données)
c) ont été mis égale à une autre valeur de la variable qui a la valeur null
d) ont été mis à un ASP.NET session/l'application variable qui n'a jamais défini ou périmés.
Est-il un général de meilleures pratiques en matière de manipulation null scénarios .NET?
Mise à JOUR: Quand je parle d'une valeur de type "null", ce que je veux dire, c'est un type de la valeur qui était soit jamais mis ou était à un ensemble de points égal ou effectuer un cast d'un objet null.
Vous devez vous connecter pour publier un commentaire.
Valeur normale types (booléens, entiers, longs, float, double, enum et les structures) ne sont pas les valeurs null.
La valeur par défaut pour tous les types de valeur est 0.
Le CLR ne vous permettront pas d'accéder à des variables, sauf s'ils ont été établis. Vous pouvez penser que ce n'est pas toujours le cas, mais parfois, le CLR étapes et les initialise pour vous. Au niveau de la méthode que vous devez explicitement initialiser toutes les variables avant de les utiliser.
De plus, comme l'autre, depuis .net 2.0 il y a un nouveau type générique appelé
Nullable<T>
. Il y a quelques compilateur abréviations en C#, comme int? moyensNullable<int>
, double? moyensNullable<double>
etc.Vous ne pouvez envelopper
Nullable<T>
non nullable types de valeur, ce qui est très bien, puisque les références ont déjà la possibilité de valeur null.Pour un int?, alors que vous pouvez tester la valeur null, il est parfois plus agréable à l'appel
x.HasValue()
.En C# il y a aussi le nullable la coalescence de l'opérateur ?? lorsque vous souhaitez affecter un nullable à un non nullable type de valeur. Mais si vous n'avez pas l'opérateur, vous pouvez appeler GetValueOrDefault().
Types de valeur ne peut pas être null. Il viole ce que cela signifie d'être un Type Valeur. Vous pouvez envelopper les Types de Valeur que Nullable(T) qui vous donne un grand ensemble de méthodes, et vérifie Rien ne fonctionne. Mais vous avez beaucoup de frais généraux avec qui wrapper. Peut-être que vous pouvez préciser ce que vous essayez de faire?
Pour l'intégralité de la syntaxe VB pour Nullable wrappers est:
EDIT: Type de Valeur sont toujours preinitialized à une valeur par défaut, 0 pour les nombres, false pour les Booléens, etc.
Est-ce que vous êtes après?
En vérité, je ne suis pas certain pourquoi vous souhaiteriez pour cette structure. La Seule fois où je voudrais vérifier pour DBNULL.La valeur, c'est quand je suis en utilisant des valeurs issues d'une base de données, et avant de m'affecter cette valeur à partir des DONNÉES de l'espace de Noms de la classe à une autre classe [i.e. dim b as string = dataReader(0)].
Généralement, si vous êtes inquiet à propos d'un objet n'ayant pas été instancié, ou qui ont besoin d'être re-instancié, puis juste un IsNothing vérifier suffira.
Dans .Net qui ne sont que deux types de nulle que je suis au courant, null (nothing en visual basic) et DbNull. Si vous utilisez un Système.Les valeurs null, vous pouvez utiliser la même valeur null vérification de la syntaxe, comme vous le feriez avec un objet. Si votre objet nullable est en boîte à la .Net CLR 2.0 est assez intelligent pour trouver la bonne façon de gérer cela.
Le seul cas où j'ai couru dans les deux types est dans la couche de données d'une application dans laquelle j'ai peut-être accéder à la base de données directement. Par exemple, j'ai couru dans DbNull dans une DataTable. Pour vérifier ces deux null types dans ce situration, vous pourriez écrire une méthode d'extension comme (désolé, C#):
Valeur des variables de type de ne peut pas contenir la valeur null, c'est parce que, null, null signifie que les points de référence nulle part. Je ne sais pas sur VB.net mais sur c#, vous pouvez envelopper les types de valeur pour être nullable à l'aide de la "?", comme:
Aussi longtemps que vous êtes en développement avec l'Option Strict on, (a) ne devrait pas être un problème. Le compilateur va hurler à vous. Si vous êtes inquiet au sujet de la vérification pour les paramètres, il suffit d'utiliser
Pour (b), votre base de données d'interaction de la couche doit gérer cela. Si vous êtes à l'aide de LINQ, il ya des façons de gérer cela. Si vous utilisez tapé des ensembles de données, il y a un .IsMyVariableNull bien sur la ligne qui devient auto-généré.
Pour (c), vous n'avez pas besoin de s'inquiéter à propos des types de valeur, mais des types de référence peut être vérifié avec un simple n'Est Rien (ou IsNot Nothing).
Pour (d), vous pouvez appliquer la même logique après la lecture. Test de la réception de la variable par rapport à Rien.
Pour la plupart, une vérification simple de n'en Est Rien, vous obtiendrez par. Votre base de données d'interaction de la couche qui va vous aider à gérer le collant cas de valeurs null dans vos données, mais c'est à vous de les gérer de façon appropriée.