Wie funktioniert GetValueOrDefault Arbeit?

Ich bin verantwortlich für einen LINQ-provider, die führt einige Laufzeit-Evaluierung von C# - code. Als Beispiel:

int? thing = null;
accessor.Product.Where(p => p.anInt == thing.GetValueOrDefault(-1))

Derzeit der obige code funktioniert nicht mit meiner LINQ-provider aufgrund thing null.

Zwar arbeite ich mit C# für eine lange Zeit, ich weiß nicht, wie GetValueOrDefault implementiert ist und daher, wie ich dieses Problem beheben.

Also meine Frage ist: wie funktioniert GetValueOrDefault Arbeit in dem Fall, dass die Instanz, auf dem es aufgerufen wird, ist null? Warum ist nicht ein NullReferenceException geworfen?

Einen Folgen auf die Frage: wie soll ich über die Replikation von einem Aufruf GetValueOrDefault mit Reflexion gegeben, die ich brauche, um zu behandeln von null-Werten.

Die Nullable<> struct ist etwas besonderes. Als eine Struktur, d.h. es kann nicht wirklich sein null, aber die Sprache erlaubt, um es zu null das erzeugt nur eine Instanz mit HasValue auf false gesetzt. GetValueOrDefault wahrscheinlich nicht hier arbeiten, weil Sie mit EF (oder eine andere query-provider), die nicht wissen, wie um es zu übersetzen, um SQL.
was meinst du mit "es funktioniert nicht"?
"funktioniert nicht" - was passiert genau?
Sorry, ich glaube das hast du falsch verstanden, die Frage. Ich weiß, wie zu lösen dieses spezielle Beispiel, aber ich bin mir nicht sicher, was in der CLR ermöglicht Instanz-Methoden aufgerufen werden, die auf null-Typen.
Ja, ich habe falsch gelesen, dass Sie wurden für den LINQ-Anbieter. Sorry!

InformationsquelleAutor Ian Newson | 2015-04-14

Schreibe einen Kommentar