Есть ли простой способ в С# проверить, чтобы экземпляр 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 до его обращения!)