c #: asignación de tipos anulables
Pregunta
¿Si tengo un decimal anulable? d " y quiero asignar d a no anulable e, ¿cuál es la forma correcta?
Solución
decimal e = d ?? 0.0;
Otros consejos
decimal e;
if(d.HasValue)
{
e = d.Value;
}
Debe determinar si incluso puede, es decir, si la n anulable tiene un valor o no.
if (d.HasValue) { e = d.Value; } else { /* now what */ }
Otro caso interesante surge con bastante frecuencia en el que desea asignar un valor anulable utilizando un ternario, en cuyo caso debe emitir para que ambas ramas tengan el mismo tipo.
d = foo ? 45 : (int?)null;
Tenga en cuenta el caso de nulo a (int?) para que ambas ramas tengan el mismo tipo.
decimal e;
if (d.HasValue)
{
e = d.Value;
}
Normalmente voy con algo como esto:
decimal e = d.HasValue ? d.Value : decimal.Zero;
La razón aquí es que soy un fanático de las operaciones ternarias y generalmente asigno el valor que obtendría si hubiera realizado un TryParse ()
fallido para el tipo con el que estoy tratando. Para decimal
que sería decimal.Zero
, para int
también sería 0
.