2008-11-20 112 views

回答

57

让变量在C#中没有赋值的唯一方法就是它是一个局部变量 - 在这种情况下,在编译时你可以告诉它并不是通过尝试从中读取:)

我怀疑你真的想Nullable<DateTime>(或DateTime?与C#语法糖) - 使其null入手,然后分配一个正常DateTime值(将在适当转换)。然后,您只需比较null(或使用HasValue属性)来查看是否设置了“真实”值。

+0

如何检查是否值等于默认datetime值。这种方法有什么不明显的缺点吗?如果(request.StartDateTime ==默认(日期时间) {request.StartDateTime = DateTime.Now;} – Menol 2016-05-13 08:33:17

+6

@Menol:那么这并不能说明有意赋予`default(DateTime) `和一个刚刚开始的方式,基本上它把域中的一个值看作“我不喜欢的正常使用的特殊和不可用的” – 2016-05-13 08:54:33

5

如果可能,使用Nullable<DateTime>

4

DateTime是值类型,所以它不能为空。 如果你认为DateTime? (可空),可以使用:

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

你的意思是,像这样:

DateTime datetime = new DateTime(); 

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

或者你可以使用可空

DateTime? datetime = null; 

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

只有第二个是防弹的。未设置DateTime的表示,并不保证框架。我个人认为他们应该为这种情况添加一个Unset静态成员。 – 2013-10-10 12:51:02

+10

要添加@RupertRawnsley所说的内容,实际上应该与缺省值(DateTime)进行比较,该值是未分配的DateTime的值。它恰好等于MinValue,但它可能会改变。 – 2015-01-06 12:48:14

0

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

4

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

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

我想说默认值总是new DateTime()。因此,我们可以写

DateTime datetime; 

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

把这个地方:

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

则:

DateTime datetime; 

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