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