En mi programa, estoy recorriendo una tabla de datos para obtener datos de cada campo. Una línea de mi código es el siguiente:¿Convertir el campo nulo a cero antes de convertir a int?
int LYSMKWh = Convert.ToInt32(resultsDT.Rows[currentRow]["LYSMKWh"]);
Básicamente, sólo estoy tomando el valor que está en la célula y su conversión a int32. Me encuentro con un problema, sin embargo, cuando los datos en el campo son nulos. Aparece un mensaje de error de Cast inválido sobre no poder convertir un "DBNull" a otro tipo.
Por lo tanto, sé que solo puedo comprobar el valor del campo antes de tratar de convertirlo haciendo algo como esto:
if (resultsDT.Rows[currentRow]["LYSMKWh"] == null)
{
resultsDT.Rows[currentRow]["LYSMKWh"] = 0;
}
Pero, ¿existe una mejor manera de hacer esto? ¿Hay algo que pueda hacer "en línea" mientras trato de convertir el valor sin tener que recurrir al uso del if
?
EDIT: Yo probé el uso de este método sugerido:
int LYSMKWh = Convert.ToInt32(resultsDT.Rows[currentRow]["LYSMKWh"] ?? "0");
Por desgracia, todavía recibido el mensaje de error moldeada no válida en lo que respecta al tipo DBNull. Se sugirió que podría tener problemas para usar el ?? operador si los tipos de cada lado eran diferentes.
Además, dado que tengo control total sobre los datos con los que estoy construyendo mi datatable, los cambié para que no se escriban valores nulos en ningún campo. Entonces, eso prácticamente niega la necesidad de convertir un nulo a un int32, en este caso. Gracias por todos los consejos, ¡a todos!
Esto realmente funcionó bastante bien para mí. Traté de usar los ejemplos a continuación con el ?? operador, pero igual terminé recibiendo el mensaje de error Recopilación inválida. ¿De qué usuario dijo CodeNaked a continuación, podrían surgir problemas al usar el ?? si los tipos de cada lado son diferentes. – Kevin