Во-первых, имя метода неправильно. Вы подразумеваете, что результатом функции является логическое значение, равное true
, если заданное значение равно NULL. На самом деле, это не так. GetValueOrDefault
может быть лучшим именем.
Во-вторых,, вы просто копируете поведение оператора нулевой коалесценции, как упоминалось другими.
В-третьих, ваш условный нечетное:
Object.Equals(value,null)) | (Object.Equals(value,DBNull.Value)
Почему Object.Equals
вместо ==
? Еще лучше, используйте Object.ReferenceEquals
, так как это дает понять, что вас интересует эталонное равенство. Кроме того, вы используете побитовый или оператор (|
), который семантически ошибочен в этом контексте, хотя и дает правильное значение. Вам нужен логический оператор или оператор ||
. (Кроме того, несоответствие: почему вы иногда пишете object
и другие времена Object
)
Наконец, используя тип object
вместо общего типа не обязательно является хорошим решением. Было бы лучше создать перегрузки для общих типов ссылок и значений: это позволяет избежать бокса в типах значений. Это также означает, что вам не нужно явно указывать тип во второй перегрузке, поскольку он может быть выведен из аргумента метода.
Прочитав другие ответы, я смущен. Вы хотите, чтобы этот метод возвращал true/false (мое предположение) или возвращал значение по умолчанию в случае null ptr? – 2010-03-16 15:30:41