Проверка наличия значения переменной DateTime

Есть ли простой способ в С# проверить, чтобы экземпляр DateTime был присвоен значение или нет?

Ответ 1

Единственным способом иметь переменную, которая не была назначена значение в С#, является ее локальная переменная - в этом случае во время компиляции вы можете сказать, что она определенно не назначена, пытаясь прочитать от него:)

Я подозреваю, что вы действительно хотите Nullable<DateTime> (или DateTime? с синтаксическим сахаром С#) - запустите его null, а затем назначьте нормальное значение DateTime (которое будет соответствующим образом преобразовано). Затем вы можете просто сравнить с null (или использовать свойство HasValue), чтобы определить, установлено ли "реальное" значение.

Ответ 2

Вы имеете в виду так:

DateTime datetime = new DateTime();

if (datetime == DateTime.MinValue)
{
    //unassigned
}

или вы можете использовать Nullable

DateTime? datetime = null;

 if (!datetime.HasValue)
 {
     //unassigned
 }

Ответ 3

положите это куда-нибудь:

public static class DateTimeUtil //or whatever name
{
    public static bool IsEmpty(this DateTime dateTime)
    {
        return dateTime == default(DateTime);
    }
}

затем:

DateTime datetime = ...;

if (datetime.IsEmpty())
{
    //unassigned
}

Ответ 4

Используйте Nullable<DateTime>, если это возможно.

Ответ 5

DateTime - это тип значения, поэтому он никогда не может быть нулевым. Если вы думаете, что DateTime? (Nullable) вы можете использовать:

DateTime? something = GetDateTime();
bool isNull = (something == null);
bool isNull2 = !something.HasValue;

Ответ 6

Я только что узнал, что GetHashCode() для неназначенного datetime всегда равен нулю. Я не уверен, что это хороший способ проверить значение null datetime, потому что я не могу найти документацию о том, почему это поведение отображается.

if(dt.GetHashCode()==0)
{
    Console.WriteLine("DateTime is unassigned"); 
} 

Ответ 7

Я бы сказал, что значение по умолчанию всегда new DateTime(). Поэтому мы можем написать

DateTime datetime;

if (datetime == new DateTime())
{
    //unassigned
}

Ответ 8

Обычно я предпочитаю, по возможности, использовать значение значений по умолчанию для определения того, были ли они установлены. Это, очевидно, невозможно все время, особенно с помощью ints, но для DateTimes я считаю, что резервирование MinValue означает, что оно не было изменено, достаточно справедливо. Преимущество этого над nullables заключается в том, что есть еще одно место, где вы получите исключение с ссылкой на null (и, вероятно, много мест, где вам не нужно проверять значение null до его обращения!)