Оператор '??'не может применяться к операндам типа 'string' и 'System.DBNull' - PullRequest
18 голосов
/ 11 ноября 2010

У меня есть следующий код C #:

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

Но выдает следующую ошибку компиляции:

Оператор ?? нельзя применять к операндам типа string и System.DBNull

Почему компилятор не допускает этот синтаксис?

Ответы [ 4 ]

34 голосов
/ 11 ноября 2010

Оба операнда должны быть объектом. Используйте явное приведение:

(object)table.Value ?? DBNull.Value;
16 голосов
/ 11 ноября 2010

Нет автоматического преобразования между string и System.DBNull, поэтому вам нужно явно указать тип, который вы хотите, добавив приведение к object:

sqlCommandObject.Parameters.AddWithValue("@Parameter",
                                         table.Value ?? (object)DBNull.Value);
7 голосов
/ 11 ноября 2010

Это потому, что не существует неявного преобразования между string и System.DBNull.

6 голосов
/ 20 августа 2018

Вместо использования DBNull.Value вы можете использовать Convert.DBNull:

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

Я полагаю, что за кулисами это в основном делает то же самое / подобное, как упомянуто в других примерах (то есть приведение DBNull кобъект), но это делает его немного проще / лаконичнее.

...