我一直在搜索很多,但找不到解决方案.你如何处理应该能够包含未初始化值(相当于null)的DateTime?我有一个类可能设置了DateTime属性值.我正在考虑将属性持有者初始化为DateTime.MinValue,然后可以轻松检查.我想这是一个很常见的问题,你是怎么做到的?
对于普通的DateTimes,如果你根本没有初始化它们,那么它们将匹配DateTime.MinValue
,因为它是值类型而不是引用类型.
您还可以使用可为空的DateTime,如下所示:
DateTime? MyNullableDate;
或者更长的形式:
NullableMyNullableDate;
最后,有一种内置的方式来引用任何类型的默认值.这将返回null
引用类型,但对于我们的DateTime示例,它将返回相同的DateTime.MinValue
:
default(DateTime)
如果您使用的是.NET 2.0(或更高版本),则可以使用可空类型:
DateTime? dt = null;
要么
Nullabledt = null;
然后:
dt = new DateTime();
你可以用以下方法检查价值:
if (dt.HasValue) { // Do something with dt.Value }
或者您可以使用它:
DateTime dt2 = dt ?? DateTime.MinValue;
你可以在这里阅读更多内容:http:
//msdn.microsoft.com/en-us/library/b3h38hb0.aspx
约会时间?MyDateTime {获得;设置;}
MyDateTime = (dr["f1"] == DBNull.Value) ? (DateTime?)null : ((DateTime)dr["f1"]);
以下方式也适用
myClass.PublishDate = toPublish ? DateTime.Now : (DateTime?)null;
请注意,PublishDate属性应该是DateTime?
我考虑使用可空类型.
DateTime? myDate
而不是DateTime myDate
.
您可以使用可空类.
DateTime? date = new DateTime?();
您可以使用可为空的DateTime.
NullablemyDateTime;
或者像这样写的东西:
DateTime? myDateTime;
值得指出的是,虽然DateTime
变量不可能null
,但仍可以在null
没有编译器错误的情况下进行比较:
DateTime date; ... if(date == null) // <-- will never be 'true' ...
我总是把时间安排到DateTime.MinValue
.这样我就不会得到任何NullErrorException,我可以将它与我知道未设置的日期进行比较.
您可以将DateTime设置为Nullable。默认情况下,DateTime不可为空。您可以通过两种方法使它可为空。在类型DateTime之后使用问号?myTime或使用通用样式Nullable。
DateTime? nullDate = null;
要么
DateTime? nullDate;