C #: use un operador combinado o ternario con Datetime Nullable
¿Cómo utilizo Null Coalescing Operator con Datetime Nullable en C #? Intentando crear una declaración de una sola línea, en una consulta de selección en Linq. Lo siguiente no funciona
select new ProductRDto
{
EffectiveEndDate = timeslice.EffectiveEndDate.HasValue ?? timeslice.EffectiveEndDate.Value.Year : null
El operador ternario crea este error
Error: operador '??' no se puede aplicar a operandos de tipo 'bool' e 'int'
EffectiveEndDate = timeslice.EffectiveEndDate.HasValue ? timeslice.EffectiveEndDate.Value.Year : null
Error: el tipo de expresión condicional no se puede determinar porque no hay una conversión implícita entre 'int' y 'null'
* tratando de no utilizar declaraciones if-else
Respuestas
Suponiendo que lo que realmente desea es el año de timeslice.EffectiveEndDatesi eso no es nulo, o un valor nulo de lo contrario, la opción más simple no es usar el operador condicional o el operador coalescente nulo; use el operador condicional nulo en su lugar:
int? year = timeslice.EffectiveEndDate?.Year;
Usaría el operador de fusión nula para usar un valor diferente en lugar de EffectiveEndDate, por ejemplo
DateTime? date = timeslice.EffectiveEndDate ?? defaultEndDate;
Si desea utilizar el operador condicional en su lugar, solo necesita especificar que desea que el nullvalor sea del tipo int?:
int? year = timeslice.EffectiveEndDate.HasValue
? timeslice.EffectiveEndDate.Value.Year
: (int?) null;
Está mezclando el operador coalescente nulo con el operador ternario. Quieres usar solo uno ?.
EffectiveEndDate = timeslice.EffectiveEndDate.HasValue
? timeslice.EffectiveEndDate.Value.Year : null;