2010-11-11 13 views
15

angewendet werden haben folgende C# -Code:Operator '??' kann nicht auf Operanden vom Typ 'String' und 'System.DBNull' ich

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value); 

Aber es führt den folgenden Kompilierungsfehler:

Operator ?? cannot be applied to operands of type string and System.DBNull

Warum doesn‘ t der Compiler erlaubt diese Syntax?

+0

Vielleicht, weil die '?? 'Betreiber erwartet, auf jeder Seite den gleichen Typ zu haben? – kite

Antwort

29

Beide Operanden müssen Objekt sein. Verwenden Sie explizite Umwandlung:

(object)table.Value ?? DBNull.Value; 
+7

Das ist nicht wirklich richtig, der Grund, dass der Kompilierfehler passiert ist nicht, weil beide Operanden zu ?? müssen Objekte sein. Es ist so, dass ohne eine explizite Umwandlung (in der Antwort mit (object) angegeben) eine implizite Umwandlung verfügbar sein muss. Da zwischen Zeichenfolge und System.DBNull keine implizite Umwandlung vorliegt, wird der Compilerfehler angezeigt. –

+5

Nicht versuchen, wählerisch zu sein, nur besorgt, dass der Autor (der sagte, dass er wusste, wie man den Fehler umgehen kann) könnte weggehen denken, dass beide Operanden zum ?? Operator muss immer Objekte sein. Seine Frage war * warum * gefällt dem Compiler nicht, nicht * wie * repariere ich ihn. –

+1

@AndrewBarrett Alles klar! Wie reparierst du es? :) – Axel

7

Es ist, weil es keine implizite Umwandlung zwischen string und System.DBNull gibt.

15

Es gibt keine automatische Konvertierung zwischen string und System.DBNull und so müssen Sie die Art explizit durch Hinzufügen eines Guss zu object festgelegt werden soll:

sqlCommandObject.Parameters.AddWithValue("@Parameter", 
             table.Value ?? (object)DBNull.Value); 
Verwandte Themen