Как проверить, является ли DateTime нулевым - PullRequest
3 голосов
/ 12 февраля 2012

У меня есть два DateTime, как указано ниже:

        DateTime startDate = CalendarFrom.SelectedDate;
        DateTime endDate = CalendarTo.SelectedDate;

Теперь я хочу проверить, выбраны ли startDate и endDate или нет.Как я знаю, мы не можем присвоить NULL значение DateTime, поэтому я пишу так:

       if (startDate == DateTime.MinValue && endDate == DateTime.MinValue)
       {
             // actions here
       }

Однако я понимаю, что для endDate это не "00:00 ", поэтому его нельзя проверить с помощью DateTime.MinValue.

Я хотел бы знать, как я смогу выполнить проверку для endDate.Спасибо!

Ответы [ 3 ]

13 голосов
/ 12 февраля 2012

A DateTime само по себе не может быть нулевым - лучше всего использовать DateTime? aka Nullable<DateTime> для представления значений, допускающих обнуление.

Непонятно, что такое CalendarFrom и CalendarTo, но они могут не поддерживать Nullable<DateTime> сами - но было бы неплохо централизовать преобразование здесь, чтобы вы могли использовать Nullable<DateTime> везде прочее чем там, где вы напрямую используете CalendarFrom и CalendarTo.

4 голосов
/ 12 февраля 2012

DateTime является структурой, поэтому она никогда не может быть нулевой.

Я могу придумать два варианта:

  1. Если вы действительно хотите поддерживать null, используйте DateTime?, чтобы создать обнуляемый DateTime.

  2. Кроме того, в вашем приложении может быть целесообразным просто установить значение DateTime в значение по умолчанию, которое указывает, что действительное значение не было установлено. Для этого значения по умолчанию вы можете использовать default(DateTime) или что-то вроде DateTime.MinValue.

3 голосов
/ 12 февраля 2012

Я не уверен, что ваши CalenderFrom и CalenderTo; но я предполагаю, что они статичны. Исходя из этого предположения, именно так я и написал бы этот код.

public static class CalendarFrom
{
    public static DateTime SelectedFrom { get; set; }
}

public static class CalendarTo
{
    public static DateTime SelectedDate { get; set; }
}

DateTime? startDate = CalendarFrom.SelectedFrom;
            DateTime? endDate = CalendarTo.SelectedDate;

            if (startDate.HasValue 
                && ( startDate.Value != DateTime.MaxValue || startDate.Value != DateTime.MinValue))
            {
            }
...