Нулевой оператор слияния (??
) работает только в том случае, если выражение слева от оператора имеет значение null.
Сообщение об ошибке:
Ошибка CS0019 Оператор '??' нельзя применять к операндам типа
«DateTime» и «DateTime»
показывает, что Settings.Default.StartDate
не обнуляется - это DateTime
.
Таким образом, вам нужно изменить StartDate
на обнуляемый DateTime
(т.е. DateTime?
).
ОК, но почему тогда:
public DateTime From => Settings.Default.StartDate == null ? DateTime.Today : Settings.Default.StartDate;
компилировать
Короткий ответ: бессмысленно, но технически правильно . Сравнение с null
всегда будет false
(поскольку DateTime
никогда не будет null
) и, следовательно, Settings.Default.StartDate
всегда будет возвращено. Это просто запутанный способ написания:
public DateTime From => Settings.Default.StartDate;
Так почему же ??
не делает то же самое? (т. е. разрешить вам использовать ??
, когда это на самом деле не имеет смысла его использовать) В основном потому, что это не определено таким образом - он не хочет позволять вам делать бессмысленные вещи, поэтому компилятор обнаруживает и блокирует это.