C # DBNull e tipos anuláveis ​​- forma mais limpa de conversão

Eu tenho um DataTable, que tem um número de colunas. Algumas dessas colunas são anuláveis.

DataTable dt;  // Value set. 
DataRow dr;  // Value set. 

// dr["A"] is populated from T-SQL column defined as: int NULL 

O que, então, é a forma mais limpa de converter um valor em um DataRow em uma variável anulável.

Idealmente, eu seria capaz de fazer algo como:

int? a = dr["A"] as int?; 

Editar: Acontece que você pode fazer isso, o efeito colateral é que, se os seus tipos de esquema não são ints, então isso sempre vai retornar null. A resposta de Ruben de usardr.Field<int?>("A") garante que as incompatibilidades de tipo não falhem silenciosamente. Isso, claro, será captado por testes unitários completos.

Em vez disso, geralmente estou digitando algo ao longo das linhas:

int? a = dr["A"] != DBNull.Value ? (int)dr["A"] : 0; 

Este é um monte de mais pressionamentos de tecla, mas mais importante, há mais espaço para alguém para encher algo com uma tecla errada. Sim, um teste de unidade vai pegar isso, mas eu prefiro pará-lo completamente.

Qual é o padrão mais limpo e menos propenso a erros para essa situação?

questionAnswers(7)

yourAnswerToTheQuestion