检查DateTime变量是否已分配值

时间:2008-11-20 12:36:13

标签: c# datetime

在C#中有一种简单的方法可以检查是否为DateTime实例分配了一个值吗?

9 个答案:

答案 0 :(得分:265)

你的意思是这样的:

DateTime datetime = new DateTime();

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

或者您可以使用Nullable

DateTime? datetime = null;

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

答案 1 :(得分:73)

拥有一个尚未在C#中赋值的变量的唯一方法是将它作为局部变量 - 在这种情况下,在编译时你可以通过尝试读取来确定它没有明确赋值从它:)

我怀疑你真的想要Nullable<DateTime>(或DateTime?使用C#语法糖) - 让它null开始,然后分配一个正常的DateTime值(将适当转换)。然后,您只需与null(或使用HasValue属性)进行比较,即可查看是否已设置“真实”值。

答案 2 :(得分:26)

把它放在某个地方:

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

然后:

DateTime datetime = ...;

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

答案 3 :(得分:5)

如果可能,请使用Nullable<DateTime>

答案 4 :(得分:5)

我刚刚发现未分配日期时间的GetHashCode()始终为零。我不确定这是否是检查null日期时间的好方法,因为,我找不到有关此行为显示原因的任何文档。

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

答案 5 :(得分:4)

DateTime是值类型,因此它不能永远不为null。 如果你认为DateTime? (Nullable)你可以使用:

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

答案 6 :(得分:2)

我说默认值始终是new DateTime()。所以我们可以写

DateTime datetime;

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

答案 7 :(得分:0)

在可能的情况下,我通常更喜欢使用值类型的默认值来确定它们是否已设置。这显然不可能一直存在,特别是对于整数 - 但对于DateTimes,我认为保留MinValue表示它没有被改变是公平的。这个超过nullables的好处是,你可以获得一个空引用异常的地方少一个(并且可能有很多地方在你访问它之前你不必检查null!)

答案 8 :(得分:0)

如果您不想担心Null值问题,例如每次使用它时都要检查null或将其包装成某种逻辑,并且您也不必担心偏移时间问题,那么这就是我解决问题的方式:

startDate = startDate < DateTime.MinValue.AddDays(1) ? keepIt : resetIt

我只是检查默认值是否在时间开始后不到一天。就像魅力一样。