Comment fonctionne GetValueOrDefault?
Je suis responsable d'un fournisseur LINQ qui effectue une évaluation du runtime de code C#. À titre d'exemple:
int? thing = null;
accessor.Product.Where(p => p.anInt == thing.GetValueOrDefault(-1))
Actuellement le code ci-dessus ne fonctionne pas avec mon fournisseur LINQ en raison de thing
être null.
Alors que j'ai travaillé avec C# pour un long moment, je ne sais pas comment GetValueOrDefault est mis en œuvre et, par conséquent, comment je dois résoudre ce problème.
Donc ma question est: comment GetValueOrDefault
de travail dans le cas où l'instance sur laquelle il est appelé est nulle? Pourquoi n'est-ce pas un NullReferenceException
jetés?
Un suivi sur la question: comment dois-je aller sur la réplication d'un appel à GetValueOrDefault
l'aide de la réflexion, étant donné que j'ai besoin de gérer les valeurs null.
source d'informationauteur Ian Newson
Vous devez vous connecter pour publier un commentaire.
thing
n'est pasnull
. Depuis les structures ne peuvent pas êtrenull
ne peut donc pasNullable<int>
êtrenull
.Le truc, c'est... c'est juste compilateur de la magie. Vous pense il est
null
. En fait, laHasValue
est mise àfalse
.Si vous appelez
GetValueOrDefault
il vérifie siHasValue
esttrue
oufalse
:Un
NullReferenceException
n'est pas levée, car il n'y a pas de référence. LeGetValueOrDefault
est une méthode dans laNullable<T>
de la structure, de sorte que ce que vous utilisez sur est un type de valeur, pas un type de référence.La
GetValueOrDefault(T)
méthode est tout simplement mis en œuvre comme ceci:Donc, à reproduire le comportement que vous n'avez qu'à vérifier la
HasValue
bien de voir ce que la valeur à utiliser.Je pense que vous fournisseur ne fonctionnait pas correctement. J'ai fait un test simple et cela a fonctionné correctement.
Il produit en sortie: Produit -1 - -1