Operator '??' kann nicht auf Operanden vom Typ ‚String‘ und ‚System.DBNull‘ angewandt werden

StackOverflow https://stackoverflow.com/questions/4153009

  •  08-10-2019
  •  | 
  •  

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 Typ string und System.DBNull angewendet werden

Warum nicht die Compiler erlauben dieser Syntax?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top