Подтвердить что ты не робот

С# - Почему DateTime.MinValue и MaxValue не являются константами времени компиляции?

Я хотел иметь необязательный параметр даты для метода (по умолчанию MinValue), чтобы проверить, действительно ли пользователь предоставил значение или нет (поставка MinValue была недействительна), но мне не разрешено, как очевидно а не константа времени компиляции.

Согласно странице MSDN, "Значение этой константы эквивалентно 00: 00: 00.0000000, 1 января 0001 года."

Так почему же это не константа времени компиляции? И почему это отличается от перехода в Int32.MinValue, что разрешено?

4b9b3361

Ответ 1

Вы не можете определить константу DateTime (или structs). Из разрешенных MSDN типов для константы:

Один из типов: byte, char, short, int, long, float, double, decimal, bool, string, тип перечисления или ссылочный тип.

Ответ 2

Временное решение: используйте параметр с возможностью nullable. IMO это все равно, поскольку особое значение явно отличается, а не просто нормальное значение.

void A(DateTime? p=null)
{
}

Другой вариант:

void A(DateTime p=default(DateTime))
{
}

Что показывает, что параметр по умолчанию может использовать default(T) как допустимое значение параметра по умолчанию для пользовательских типов.

Или просто перегрузите метод для разного количества параметров.