我一直在寻找,但没有找到解决办法。如何处理应该能够包含未初始化值(相当于null)的DateTime ?我有一个类,它可能有一个DateTime属性值设置或没有。我正在考虑将属性持有人初始化为DateTime。MinValue,然后可以很容易地检查。我想这是一个很常见的问题,你是怎么做到的?
当前回答
值得指出的是,虽然DateTime变量不能为空,但它仍然可以被比较为空而不会出现编译器错误:
DateTime date;
...
if(date == null) // <-- will never be 'true'
...
其他回答
我总是把时间设置为DateTime.MinValue。这样我就不会得到任何NullErrorException,我可以将它与我知道没有设置的日期进行比较。
DateTime ?MyDateTime{拿套;}
MyDateTime = (dr["f1"] == DBNull.Value) ? (DateTime?)null : ((DateTime)dr["f1"]);
下面的方法也可以
myClass.PublishDate = toPublish ? DateTime.Now : (DateTime?)null;
请注意属性PublishDate应该是DateTime?
对于普通的DateTime,如果你根本不初始化它们,那么它们将匹配DateTime。MinValue,因为它是一个值类型而不是引用类型。
你也可以使用一个可空的DateTime,像这样:
DateTime? MyNullableDate;
或较长的形式:
Nullable<DateTime> MyNullableDate;
最后,有一种内置的方式来引用任何类型的默认值。对于引用类型,这将返回null,但对于我们的DateTime示例,它将返回与DateTime相同的值。MinValue:
default(DateTime)
或者,在c#的最新版本中,
default
虽然每个人都已经给出了答案,但我将提到一种容易将datetime传递到函数中的方法
[ERROR:cannot convert system.datetime?]system.datetime)
DateTime? dt = null;
DateTime dte = Convert.ToDateTime(dt);
现在你可以在函数内部传递dte了,没有任何问题。
推荐文章
- Linq-to-Entities Join vs GroupJoin
- 为什么字符串类型的默认值是null而不是空字符串?
- 在list中获取不同值的列表
- 组合框:向项目添加文本和值(无绑定源)
- 为什么在JavaScript的Date构造函数中month参数的范围从0到11 ?
- 在Windows批处理脚本中格式化日期和时间
- 如何为ASP.net/C#应用程序配置文件值中的值添加&号
- 从System.Drawing.Bitmap中加载WPF BitmapImage
- 如何找出一个文件存在于c# / .NET?
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- [DataContract]的命名空间
- string. isnullorempty (string) vs. string. isnullowhitespace (string)
- 完全外部连接
- 如何增加日期时间一天?
- 在foreach循环中编辑字典值