Почему DateTime.MinValue и MaxValue не являются константами времени компиляции? - PullRequest
26 голосов
/ 28 июля 2011

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

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

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

Ответы [ 2 ]

23 голосов
/ 28 июля 2011

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

Один из типов: байт, тип char, short, int, long, float, double, decimal, bool, string, тип enum или ссылочный тип..

13 голосов
/ 28 июля 2011

Обходной путь: используйте обнуляемый параметр.ИМО, в любом случае это чище, так как специальное значение явно отличается, а не просто от нормального значения.

void A(DateTime? p=null)
{
}

Другая альтернатива:

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

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

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

...