Ответ 1
Вы не можете определить константу DateTime (или structs). Из разрешенных MSDN типов для константы:
Один из типов: byte, char, short, int, long, float, double, decimal, bool, string, тип перечисления или ссылочный тип.
Я хотел иметь необязательный параметр даты для метода (по умолчанию MinValue), чтобы проверить, действительно ли пользователь предоставил значение или нет (поставка MinValue была недействительна), но мне не разрешено, как очевидно а не константа времени компиляции.
Согласно странице MSDN, "Значение этой константы эквивалентно 00: 00: 00.0000000, 1 января 0001 года."
Так почему же это не константа времени компиляции? И почему это отличается от перехода в Int32.MinValue, что разрешено?
Вы не можете определить константу DateTime (или structs). Из разрешенных MSDN типов для константы:
Один из типов: byte, char, short, int, long, float, double, decimal, bool, string, тип перечисления или ссылочный тип.
Временное решение: используйте параметр с возможностью nullable. IMO это все равно, поскольку особое значение явно отличается, а не просто нормальное значение.
void A(DateTime? p=null)
{
}
Другой вариант:
void A(DateTime p=default(DateTime))
{
}
Что показывает, что параметр по умолчанию может использовать default(T)
как допустимое значение параметра по умолчанию для пользовательских типов.
Или просто перегрузите метод для разного количества параметров.