2017-02-16 25 views
0

Редактировать: Просто, чтобы быть ясным, я не спрашиваю (Null против DBNull.Value) или (IsDBNull против IsNull).IsDBNull vs DBNull.Value, они одинаковы?


Ну, я всегда использую IsDBNull() для оценки полой базы данных и проверить, если значение DBNull, но я заметил, что во многих примерах кода, люди используют DBNull.Value для той же цели. Вот как:

If IsDBNull(obj) Then DoSomething()  ' ---> My approach 
If obj = DBNull.Value Then DoSomething() ' ---> Theirs. 

Также в C#:

if (obj == DBNull.Value) {DoSomething();} 

Я сделал некоторые поиск, чтобы узнать, если они одинаковы или, если есть какая-то разница между ними, но не может найти какие-либо полезные статьи которые показывают эти два конкретных подхода оценки вместе.

This MSDN link демонстрирует, как DBNull.Value.Equals делает то же самое, как IsDBNull функции, но никогда не упоминает/предлагает использовать DBNull.Value для оценки, без использования Equals функции.

Итак, мне действительно интересно, есть ли какая-либо фактическая разница между этими двумя, чтобы один из них был рекомендован другому? Или они делают то же самое?

+1

Эта вторая строка должна использовать 'Is', а не' = ', но, кроме того, они функционально эквивалентны. Этот метод IsDBNull, вероятно, использует этот второй метод внутри. – jmcilhinney

+0

[Вот реализация .Net.] (Https://github.com/Microsoft/referencesource/blob/master/System.Data/System/Data/SqlClient/SqlDataReader.cs#L2917) –

+0

@WillRay, то есть реализация метода 'SqlDataReader.IsDBNull', который не указан в вопросе. Метод в приведенном выше коде «Microsoft.VisualBasic.Information.IsDBNull». – jmcilhinney

ответ

0

Нет, они не то же самое. DBNull.Value фактически является константой, а IsDBNull - это функция, которая возвращает true или false.

IsDbNull - это тестовый флаг, возвращающий Boolean и являющийся выражением ярлыка для использования в Если заявления. Вы можете использовать метод Obj = DBNull.value, но IsDbNull - предпочтительный метод согласно MS.

Однако, если вы хотите использовать оператор выбора случай, вам все равно нужно использовать объект DBNull.Value

Select case Obj 
    Case DBNull.value 
    Case "Whatever" 
End Select 

Конечно, вы также должны DBNull.Value, если вы хотите установить поле назад к нулевому значению.

Это похоже на Double.IsNaN и Double.NaN.

 Смежные вопросы

  • Нет связанных вопросов^_^