当前位置:  开发笔记 > 编程语言 > 正文

检查DateTime变量是否已分配值

如何解决《检查DateTime变量是否已分配值》经验,为你挑选了5个好方法。

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



1> Hath..:

你的意思是这样的:

DateTime datetime = new DateTime();

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

或者你可以使用Nullable

DateTime? datetime = null;

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


要添加@RupertRawnsley所说的内容,您实际应该与default(DateTime)进行比较,该默认值是未分配的DateTime的值.它恰好等于MinValue,但它可能会改变.
只有第二个是防弹的.第一个假设是关于框架无法保证的DateTime的未设置表示.我个人认为他们应该为这个场景添加一个Unset静态成员.

2> Jon Skeet..:

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

我怀疑你真的想要Nullable(或DateTime?使用C#语法糖) - 让它null开始,然后分配一个正常值DateTime(将适当转换).然后你可以比较null(或使用HasValue属性)来查看是否已经设置了"真实"值.


@Menol:嗯,这并没有说明一个故意被赋予了"default(DateTime)"值的字段和一个只是那种方式开始的字段之间的区别.基本上它将域内的一个值视为"特殊且不可用于正常使用",这是我不喜欢的.

3> sonatique..:

把它放在某个地方:

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> baretta..:

Nullable尽可能使用.



5> Arcturus..:

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

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

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有