Ответы, которые уже даны - что тип значения, не имеющий значения NULL, никогда не будет нулевым, и поэтому известно, что сравнение возвращает false во время компиляции - верны, вы можете задаться вопросом об очевидном последующем вопросе:почему это даже законно ?Этот вопрос задавался много раз на SO;короткая версия состоит в том, что C # предоставляет «поднятый» оператор равенства для каждой структуры, который предоставляет оператор равенства для типа, не допускающего обнуление (если поднятый, конечно, уже не существует.)
То есть, поскольку DateTime предоставляет оператор ==, компилятор автоматически генерирует оператор == для DateTime? и , что оператор применим в вашем случае.