检查DateTimevariables是否有一个赋值

在C#中有一种简单的方法来检查DateTime实例是否已被赋值?

在C#中有一个没有赋值的variables的唯一方法就是让它成为一个局部variables – 在这种情况下,在编译时你可以通过尝试读取它来判断它是不是明确分配的: )

我怀疑你真的想要Nullable<DateTime> (或DateTime?与C#语法糖) – 使它开始,然后指定一个正常的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是值types,所以它不能永远为空。 如果你认为DateTime? (可为空)可以使用:

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

我刚刚发现,一个未分配的date时间GetHashCode()始终为零。 我不知道这是否是检查空date时间的好方法,因为我找不到任何有关此行为显示的文档。

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

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

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

如果可能的话,我通常更喜欢使用值types的默认值来确定它们是否已被设置。 这显然是不可能的,特别是对于整数 – 但是对于DateTime,我认为保留MinValue来表示它没有被改变是公平的。 这个优于空的好处是,有一个地方,你会得到一个空引用exception(可能很多地方,你不必检查null之前访问它!)