У меня есть 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?;
Редактировать : Оказывается, вы МОЖЕТЕ сделать это, побочным эффектом является то, что если ваши типы схем не являются целочисленными, то это ВСЕГДА будет возвращать ноль. Ответ Рубена на использование dr.Field<int?>("A")
гарантирует, что несоответствия типов не произойдут без ошибок. Это, конечно, будет подхвачено тщательными юнит-тестами.
Вместо этого я обычно набираю что-то вроде:
int? a = dr["A"] != DBNull.Value ? (int)dr["A"] : 0;
Это намного больше нажатий клавиш, но что еще более важно, есть больше места для того, чтобы кто-то набил что-то неправильным нажатием клавиши.
Да, юнит тест подхватит это, но я бы лучше вообще его остановил.
Какой самый чистый, наименее подверженный ошибкам шаблон для этой ситуации.