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; 

Это намного больше нажатий клавиш, но что еще более важно, есть больше места для того, чтобы кто-то набил что-то неправильным нажатием клавиши. Да, юнит тест подхватит это, но я бы лучше вообще его остановил.

Какой самый чистый, наименее подверженный ошибкам шаблон для этой ситуации.

Ответы на вопрос(7)

Ваш ответ на вопрос