C # DBNull и nullable Types - чистейшая форма конвертации
У меня есть DataTable, который имеет ряд столбцов. Некоторые из этих столбцов обнуляются.
DataTable dt; // Value set.
DataRow dr; // Value set.
// dr["A"] is populated from T-SQL column defined as: int NULL
Что же тогда является самой чистой формой преобразования значения в DataRow в переменную, допускающую значение NULL?
В идеале я мог бы сделать что-то вроде:
int? a = dr["A"] as int?;
редактироватьОказывается, вы МОЖЕТЕ сделать это, побочным эффектом является то, что если ваши типы Schema не являются целочисленными, то это ВСЕГДА будет возвращать ноль. Ответ Рубена об использованииdr.Field<int?>("A")
гарантирует, что несоответствия типов не произойдут без ошибок. Это, конечно, будет подхвачено тщательными юнит-тестами.
Вместо этого я обычно набираю что-то вроде:
int? a = dr["A"] != DBNull.Value ? (int)dr["A"] : 0;
Это намного больше нажатий клавиш, но что еще более важно, есть больше места для того, чтобы кто-то набил что-то неправильным нажатием клавиши. Да, юнит тест подхватит это, но я бы лучше вообще его остановил.
Какой самый чистый, наименее подверженный ошибкам шаблон для этой ситуации.