(любой == System.DBNull.Value) vs (любой - System.DBNull)

Есть ли у кого-то предпочтение в том, как проверить, имеет ли значение DBNull? Я нашел, что эти два утверждения дают мне результаты, которые я хочу, но просто интересно, есть ли предпочтение?

if (any is System.DBNull)

то же самое, что:

if (any == System.DBNull.Value)

Спасибо!

Ответ 1

if (any == System.DBNull.Value) ...

Я предпочитаю это, просто потому, что я читал это как сравнение значений, а не типов.

Ответ 2

Я стараюсь использовать

if (DBNull.Value.Equals(value)) {
    //
}

или

if (Convert.IsDBNull(value)) {
    //
}

Ответ 3

is не использует отражение, как говорит Kevlar623. Он отображает операцию isinst в IL. На этом уровне сравнение производительности просто глупо, если только вы не работаете над системой управления ракетами.

Я использую value is DBNull. Это просто звучит правильно и как разработчик параноидов, я не могу допустить, что единственным значением, когда-либо существовавшим, является DBNull.Value. Ошибки происходят.

Ответ 4

если вы находитесь в С#, вы должны использовать ==; is использует отражение, которое дороже вычислять, тем более, что существует только один экземпляр System.DBNull.

Ответ 5

Мне нравится "is System.DBNull" больше, потому что я ненавижу идею сравнивать что-то с NULL и быть правдой. Многие другие синтаксисы (что, черт возьми, это множественное число?) Имели бы что-нибудь == NULL, возвращают NULL.

Я понимаю, что там DBNull.Value по какой-то причине. Я знаю. Я перечисляю свое ПРЕДПОЧТЕНИЕ:)

Ответ 6

Это хороший пример формы, следующий за функцией. Каким бы ни было более эффективным, это путь. То, как это выглядит, читает, или плохие имена, которые он вам называет, не имеет значения. Используйте язык эффективно, не форматируйте язык в новый.