Operator '??' kann nicht auf Operanden vom Typ ‚String‘ und ‚System.DBNull‘ angewandt werden
Frage
Ich habe folgende C # -Code:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);
Aber es führt den folgenden Kompilierungsfehler:
Operator
??
kann nicht auf Operanden vom Typstring
undSystem.DBNull
angewendet werden
Warum nicht die Compiler erlauben dieser Syntax?
Lösung
Beide Operanden müssen Objekt sein. Verwenden Sie explizite Umwandlung:
(object)table.Value ?? DBNull.Value;
Andere Tipps
Es gibt keine automatische Konvertierung zwischen string
und System.DBNull
und so müssen Sie die Art explizit durch Hinzufügen eines Gusses zu object
festgelegt werden sollen:
sqlCommandObject.Parameters.AddWithValue("@Parameter",
table.Value ?? (object)DBNull.Value);
Es ist, weil es keine implizite Konvertierung zwischen string
und System.DBNull
ist.
Anstelle der Verwendung von DBNull.Value können Sie Convert.DBNull verwenden:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? Convert.DBNull);
Ich glaube, es hinter den Kulissen sind im Grunde die gleiche / ähnliche Sache zu tun, wie in anderen Beispielen erwähnt (das heißt DBNull zu Objekt Gießen), aber es macht es ein wenig einfacher / conciser.