Ответ 1
if (any == System.DBNull.Value) ...
Я предпочитаю это, просто потому, что я читал это как сравнение значений, а не типов.
Есть ли у кого-то предпочтение в том, как проверить, имеет ли значение DBNull
? Я нашел, что эти два утверждения дают мне результаты, которые я хочу, но просто интересно, есть ли предпочтение?
if (any is System.DBNull)
то же самое, что:
if (any == System.DBNull.Value)
Спасибо!
if (any == System.DBNull.Value) ...
Я предпочитаю это, просто потому, что я читал это как сравнение значений, а не типов.
Я стараюсь использовать
if (DBNull.Value.Equals(value)) {
//
}
или
if (Convert.IsDBNull(value)) {
//
}
is
не использует отражение, как говорит Kevlar623. Он отображает операцию isinst
в IL. На этом уровне сравнение производительности просто глупо, если только вы не работаете над системой управления ракетами.
Я использую value is DBNull
. Это просто звучит правильно и как разработчик параноидов, я не могу допустить, что единственным значением, когда-либо существовавшим, является DBNull.Value
. Ошибки происходят.
если вы находитесь в С#, вы должны использовать ==
; is
использует отражение, которое дороже вычислять, тем более, что существует только один экземпляр System.DBNull
.
Мне нравится "is System.DBNull" больше, потому что я ненавижу идею сравнивать что-то с NULL и быть правдой. Многие другие синтаксисы (что, черт возьми, это множественное число?) Имели бы что-нибудь == NULL, возвращают NULL.
Я понимаю, что там DBNull.Value по какой-то причине. Я знаю. Я перечисляю свое ПРЕДПОЧТЕНИЕ:)
Это хороший пример формы, следующий за функцией. Каким бы ни было более эффективным, это путь. То, как это выглядит, читает, или плохие имена, которые он вам называет, не имеет значения. Используйте язык эффективно, не форматируйте язык в новый.