C # ?? null Koaleszenzoperator Frage

7

Ich habe die Eigenschaft Person der Klasse Geburtstag als Nullable DateTime definiert. Warum sollte der Koaleszenzoperator null im folgenden Beispiel nicht funktionieren? ?

%Vor%

Der Compiler Fehler, den ich bekam, war "Operator '??' kann nicht auf Operanden vom Typ 'System.DateTime' angewendet werden und 'System.DBNull' "

Folgendes wurde ebenfalls kompiliert:

%Vor%

Ich habe (wie von Refactor empfohlen) eine Umwandlung zu (object) hinzugefügt, und es wurde kompiliert, funktionierte jedoch nicht ordnungsgemäß und der Wert wurde in beiden Fällen in der sqlserver db als null gespeichert.

%Vor%

Kann jemand erklären, was hier vor sich geht?

Ich musste den folgenden plumpen Code verwenden:

%Vor%     
Lill Lansey 06.08.2010, 15:22
quelle

3 Antworten

20

Das Problem ist, dass DateTime? und DBNull.Value nicht vom selben Typ sind, so dass Sie den Null-Koaleszenzoperator nicht verwenden können.

In Ihrem Fall können Sie person.Birthday ?? (object)DBNull.Value verwenden, um einen Wert vom Typ object bis Add()

zu übergeben     
Dave Downs 06.08.2010, 15:27
quelle
3

Ihr erstes Problem besteht darin, dass für den Operator ?? oder ?: die Objekte für beide Optionen vom selben Typ sein müssen. Hier sind sie unterschiedlicher Art.

    
James Curran 06.08.2010 15:29
quelle
3

Ich bevorzuge es, vor der Ausführung der Abfrage über meine Parameter zu iterieren und dabei alle Instanzen von null in DBNull zu ändern, zum Beispiel:

%Vor%

Dadurch kann ich Nullwerte unverändert lassen und sie später einfach massenweise austauschen.

    
JYelton 06.08.2010 16:16
quelle