C #: Verwenden Sie Coalesing oder Ternary Operator mit Datetime Nullable
Wie verwende ich den Null Coalescing Operator mit Datetime Nullable in C #? Versuch, eine einzeilige Anweisung in einer Auswahl in Linq-Abfrage zu erstellen. Folgendes funktioniert nicht
select new ProductRDto
{
EffectiveEndDate = timeslice.EffectiveEndDate.HasValue ?? timeslice.EffectiveEndDate.Value.Year : null
Ternary Operator erstellt diesen Fehler
Fehler: Operator '??' kann nicht auf Operanden vom Typ 'bool' und 'int' angewendet werden.
EffectiveEndDate = timeslice.EffectiveEndDate.HasValue ? timeslice.EffectiveEndDate.Value.Year : null
Fehler: Der Typ des bedingten Ausdrucks kann nicht bestimmt werden, da keine implizite Konvertierung zwischen 'int' und 'null' erfolgt.
* versucht, if-else-Anweisungen nicht zu verwenden
Antworten
Angenommen, Sie möchten tatsächlich das Jahr timeslice.EffectiveEndDate, in dem dies nicht null ist, oder ansonsten einen Nullwert. Die einfachste Option besteht darin, weder den bedingten Operator noch den Null-Koaleszenzoperator zu verwenden. Verwenden Sie stattdessen den nullbedingten Operator :
int? year = timeslice.EffectiveEndDate?.Year;
Sie würden den Null-Koaleszenz-Operator verwenden, um einen anderen Wert anstelle von EffectiveEndDatez
DateTime? date = timeslice.EffectiveEndDate ?? defaultEndDate;
Wenn Sie stattdessen den bedingten Operator verwenden möchten, müssen Sie nur angeben, dass der nullWert vom Typ sein soll int?:
int? year = timeslice.EffectiveEndDate.HasValue
? timeslice.EffectiveEndDate.Value.Year
: (int?) null;
Sie verwechseln den Null-Koaleszenz-Operator mit dem ternären Operator. Sie möchten nur eine verwenden ?.
EffectiveEndDate = timeslice.EffectiveEndDate.HasValue
? timeslice.EffectiveEndDate.Value.Year : null;