c # ¿por qué no se puede asignar un nulo int como nulo como valor [duplicado]
Pregunta
Esta pregunta ya tiene una respuesta aquí:
Explica por qué no se puede asignar un valor nulo a un int anulable, por ejemplo,
int? accom = (accomStr == "noval" ? null : Convert.ToInt32(accomStr));
¿Qué tiene de malo ese código?
Solución
El problema no es que nulo no se puede asignar a un int ?. El problema es que ambos valores devueltos por el operador ternario deben ser del mismo tipo, o uno debe ser implícitamente convertible al otro. En este caso, nulo no se puede convertir implícitamente a int ni viceversa, por lo que es necesario un reparto explícito. Intente esto en su lugar:
int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
Otros consejos
Lo que Harry S dice es exactamente correcto, pero
int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));
también haría el truco. (Los usuarios de Resharper siempre podemos vernos en multitudes ...)
Otra opción es usar
int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr);
Me gusta más este.
Del mismo modo lo hice por mucho tiempo:
myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;