Проверка, чтобы увидеть, если значение datetime переменная имеет значение, присвоенное



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

663   8  

8 ответов:

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

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

значит так:

DateTime datetime = new DateTime();

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

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

DateTime? datetime = null;

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

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

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

затем:

DateTime datetime;

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

использовать Nullable<DateTime> Если это возможно.

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

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

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

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

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

DateTime datetime;

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

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

Comments

    Ничего не найдено.