(любая == System.DBNull.Value) против (любая - System.DBNull) - PullRequest
10 голосов
/ 20 сентября 2008

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

if (any is System.DBNull)

так же, как:

if (any == System.DBNull.Value)

Спасибо!

Ответы [ 6 ]

11 голосов
/ 20 сентября 2008

Я склонен использовать

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

или

if (Convert.IsDBNull(value)) {
    //
}
5 голосов
/ 21 сентября 2008

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

Я использую value is DBNull. Звучит правильно, и как параноик-разработчик, я не могу поверить, что единственная существующая ценность - DBNull.Value. Баги случаются.

4 голосов
/ 20 сентября 2008
if (any == System.DBNull.Value) ...

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

0 голосов
/ 23 декабря 2008

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

0 голосов
/ 20 сентября 2008

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

Я понимаю, что есть причина DBNull.Value. Я знаю. Я перечисляю свою преференцию:)

0 голосов
/ 20 сентября 2008

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

...