C # DB Tipos nulos y anulables: la forma más limpia de conversión

Tengo un DataTable, que tiene una serie de columnas. Algunas de esas columnas son anulables.

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

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

Cuál, entonces, es la forma más limpia de convertir un valor en un DataRow, a una variable que puede contener nulos.

Idealmente, podría hacer algo como:

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

Editar: Resulta que PUEDES hacer esto, el efecto secundario es que si tus tipos de Esquema no son correctos, esto SIEMPRE va a devolver el valor nulo. La respuesta de Ruben de usardr.Field<int?>("A") asegura que los desajustes de tipo no fallan silenciosamente. Esto, por supuesto, será recogido por pruebas unitarias completas.

En su lugar, por lo general, estoy escribiendo algo como:

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

Este es un montón más de pulsaciones de teclas, pero lo que es más importante, hay más espacio para que alguien rellene algo con una pulsación incorrecta. Sí, una prueba de unidad recogerá esto, pero prefiero detenerlo por completo.

¿Cuál es el patrón más limpio y menos propenso a errores para esta situación?

Respuestas a la pregunta(7)

Su respuesta a la pregunta