Мне любопытно, за какие плюсы и минусы использования if(some_value is DBNull)
против if(DBNull.Value.Equals(some_value))
. Лично я предпочитаю if(some_value is DBNull)
, потому что я считаю его более читаемым. Я знаю, что Microsoft рекомендует использовать if(DBNull.Value.Equals(some_value))
согласно https://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx.- DBNull против DBNull.Value.Equals()
ответ
Я бы выбрал путь DBNull.Value.Equals
.
Почему?
Beacuse is
будет проверять тип на равенство. Он должен искать тип левой руки и сопоставлять его с правым типом, который он также должен искать. После этого он может сравнивать типы, скорее всего, путем проверки ссылочного равенства.
Это будет менее эффективно, чем просто проверка ссылочного равенства, которое делает DBNull.Value.Equals
. Поскольку есть только один экземпляр DBNull.Value
, эта проверка очень точная и очень быстрая.
И использование '==' или '! =' Еще лучше и быстрее :) –
Который был бы таким же, как 'Equals', если я прав @IvanStoev Оба проверяют для ссылочного равенства. –
Ну, не то же самое. Это будет «ReferenceEquals», то есть простая инструкция IL. –
some_value is DbNull
: проверяет тип of some_value против типа DBNull
. Это можно использовать, если вы можете либо создать экземпляр DBNull
ИЛИ наследовать его. Но нет, этот класс имеет частные конструкторы и запечатан.
DBNull.Value.Equals(some_value)
: проверяет значение of some_value относительно значения, представленного DBNull.Value
.
Итак, это не про или минусы, просто заметьте, что это такое. Мы уже знаем, что ... –
Нет за и против. Оба сопоставляют совершенно разные вещи - введите в одном случае и значение в другой. Лошади для курсов .... –
В общем, вы правы. Но в случае DbNull результат тот же: DbNull.Value - единственное возможное значение типа DbNull. –
value is DBNull
фактически проверяет, является ли value
экземпляром класса DBNull
, в то время как value == DBNull.Value
фактически выполняет опорное сравнение между value
и единственным экземпляром класса одноэлементного DBNull
.
В value is DBNull
проверяет value
является экземпляром DBNull
, что возможно только в том случае value == DBNull.Value
, так как DBNull
одноэлементно.
Преимущество использования value == DBNull.Value
заключается в том, что он делает прямое сравнительное сравнение, которое будет более эффективно, чем определение типов для сравнения is DBNull
.
- 1. Как DBNull не равны DBNull
- 2. Насколько выполняется проверка DBNull.Value.Equals()?
- 3. Получение DBNull исключения
- 4. Правильное использование DBNull
- 5. Что в DBNull
- 6. SqlDataReader DBNull значение
- 7. DBNull if statement
- 8. Ручка DBNull в C#
- 9. Объясните обработку DBNull?
- 10. Обработка данных DBNull
- 11. Automapper dbNull StrongTypingException
- 12. Linq с DbNull значениями
- 13. Кастинг DBNull для boolean
- 14. dataset dateTime Dbnull
- 15. Как сравнить DBNull выражение
- 16. Ошибка DBNull - 'System.InvalidCastException'
- 17. Недопустимый тип хранилища: DBNull
- 18. LINQ ошибка с DBNull
- 19. ошибка Звено DBNull
- 20. Кратким использованием DBNull? (Ternary?)
- 21. нуль/DBNull преобразования
- 22. DBNull ошибка придумывает
- 23. Фильтрация DBNull с LINQ
- 24. DataReader возвращает DBNULL
- 25. DBNull check for ExecuteScalar
- 26. ExecuteScalar если DBNull вопрос
- 27. Обработка DateTime DBNull
- 28. Ручка DBNull в инициализаторах объекта
- 29. VB Lambda, который проверяет DBNull
- 30. Разбор значения DBNULL в double
он не дублируется, этот вопрос отличается от этого –