Operatore '??' non può essere applicato a operandi di tipo 'stringa' e 'System.DBNull'
Domanda
Ho il seguente codice C #:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);
Ma getta il seguente errore di compilazione:
??
operatore non può essere applicato a operandi di tipostring
eSystem.DBNull
Perché il compilatore non permette questa sintassi?
Soluzione
Entrambi gli operandi devono essere oggetto. Utilizzare cast esplicito:
(object)table.Value ?? DBNull.Value;
Altri suggerimenti
Non v'è alcuna conversione automatica tra string
e System.DBNull
e quindi è necessario specificare il tipo che si desidera in modo esplicito con l'aggiunta di un cast di object
:
sqlCommandObject.Parameters.AddWithValue("@Parameter",
table.Value ?? (object)DBNull.Value);
E 'perché non v'è alcuna conversione implicita tra string
e System.DBNull
.
Invece di usare DBNull.Value, è possibile utilizzare Convert.DBNull:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? Convert.DBNull);
Credo che dietro le quinte è fondamentalmente facendo la stessa / simile cosa come detto in altri esempi (vale a dire la fusione DBNull a oggetto), ma rende un po 'più semplice / conciser.