c # ¿por qué no se puede asignar un nulo int como nulo como valor [duplicado]

StackOverflow https://stackoverflow.com/questions/330471

  •  11-07-2019
  •  | 
  •  

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?

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top