Как DBNull может не равняться DBNull
Вопрос
У меня есть следующая строка кода
if (DBNull.Value.Equals(o) || o != null)
где o
является object o in row.ItemArray
Я продолжаю получать сообщение об ошибке...>
Xml type "List of xdt:untypedAtomic" does not support a conversion from Clr type "DBNull" to Clr type "String".
Чего я не понимаю, так это того, что когда я просматриваю свой код, это if
должен улавливать это и выполнять мое альтернативное действие, но этого не происходит?
Может кто-нибудь, пожалуйста, пролить немного света на меня.
Спасибо!
Решение
Попробуйте использовать
Преобразовать.IsDBNull способ.
Другие советы
Я думаю, ваша проблема в том, что на самом деле
DBNull.Value == null
//is always false
DBNull - это специальный класс для сравнения значений, возвращаемых из базы данных, поэтому вам действительно нужно проверить наличие условия null И DBNull.value, если ваш массив содержит и то, И другое.
Редактировать: Извините, если присмотреться повнимательнее к вашему коду, возможно, вам просто нужно отменить свою операцию OR.Если o == null, ваш первый оператор взорвется вместе с вашим исключением.Попробуй:
if (o != null || o == DBNull.Value)
может быть, такое сравнение помогает
if ( !o.GetType().Equals( DBNull.Value ) )
или
if (o is DBNull)