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