DateTime"null"值

Mat*_*ats 262 c# null datetime

我一直在搜索很多,但找不到解决方案.你如何处理应该能够包含未初始化值(相当于null)的DateTime?我有一个类可能设置了DateTime属性值.我正在考虑将属性持有者初始化为DateTime.MinValue,然后可以轻松检查.我想这是一个很常见的问题,你是怎么做到的?

Joe*_*orn 405

对于普通的DateTimes,如果你根本没有初始化它们,那么它们将匹配DateTime.MinValue,因为它是值类型而不是引用类型.

您还可以使用可为空的DateTime,如下所示:

DateTime? MyNullableDate;
Run Code Online (Sandbox Code Playgroud)

或者更长的形式:

Nullable<DateTime> MyNullableDate;
Run Code Online (Sandbox Code Playgroud)

最后,有一种内置的方式来引用任何类型的默认值.这将返回null引用类型,但对于我们的DateTime示例,它将返回相同的DateTime.MinValue:

default(DateTime)
Run Code Online (Sandbox Code Playgroud)

  • 如果您提供如何使用它的示例,将会有很大帮助.如何将数据库中的DateTime(可能是DBNull)分配给可为空的DateTime? (7认同)
  • 值得注意的是,当你初始化它们并使用null时,它们也被分配了`DateTime.MinValue`. (7认同)
  • @ kirk.burleson看起来像一个单独的问题。 (2认同)

Mar*_*ram 84

如果您使用的是.NET 2.0(或更高版本),则可以使用可空类型:

DateTime? dt = null;
Run Code Online (Sandbox Code Playgroud)

要么

Nullable<DateTime> dt = null;
Run Code Online (Sandbox Code Playgroud)

然后:

dt = new DateTime();
Run Code Online (Sandbox Code Playgroud)

你可以用以下方法检查价值:

if (dt.HasValue)
{
  // Do something with dt.Value
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用它:

DateTime dt2 = dt ?? DateTime.MinValue;
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多内容:http:
//msdn.microsoft.com/en-us/library/b3h38hb0.aspx


Ima*_*idi 30

约会时间?MyDateTime {获得;设置;}

MyDateTime = (dr["f1"] == DBNull.Value) ? (DateTime?)null : ((DateTime)dr["f1"]);
Run Code Online (Sandbox Code Playgroud)

  • 这帮助我发现只传递 `null` 是行不通的。它需要是`(DateTime?)null`。 (3认同)

Ale*_*sei 27

以下方式也适用

myClass.PublishDate = toPublish ? DateTime.Now : (DateTime?)null;
Run Code Online (Sandbox Code Playgroud)

请注意,PublishDate属性应该是DateTime?


Dav*_*dro 12

我考虑使用可空类型.

DateTime? myDate而不是DateTime myDate.


Aar*_*ith 6

您可以使用可空类.

DateTime? date = new DateTime?();
Run Code Online (Sandbox Code Playgroud)


Pat*_*son 6

您可以使用可为空的DateTime.

Nullable<DateTime> myDateTime;
Run Code Online (Sandbox Code Playgroud)

或者像这样写的东西:

DateTime? myDateTime;
Run Code Online (Sandbox Code Playgroud)


unc*_*der 6

值得指出的是,虽然DateTime变量不可能null,但仍可以在null没有编译器错误的情况下进行比较:

DateTime date;
...
if(date == null) // <-- will never be 'true'
  ...
Run Code Online (Sandbox Code Playgroud)


Pat*_*ins 5

我总是把时间安排到DateTime.MinValue.这样我就不会得到任何NullErrorException,我可以将它与我知道未设置的日期进行比较.

  • 这意味着你无法区分"我真的需要这里的DateTime"和"它是可选的" - Nullable <DateTime>是一个更好的解决方案,IMO. (8认同)
  • 我想你错过了我的答案,Spoulson写了一些东西,我正在回答.关于公众成员,它不一样,你知道.它就像String.Empty或null.你可以做到这两点,不是因为String.Empty更好,因为null是错误的.随你. (3认同)
  • 这很方便,但我将DateTime.MinValue视为一个值,而不是特殊情况.它只会导致问题.我会选择Nullable <DateTime>. (2认同)

小智 5

您可以将DateTime设置为Nullable。默认情况下,DateTime不可为空。您可以通过两种方法使它可为空。在类型DateTime之后使用问号?myTime或使用通用样式Nullable。

DateTime? nullDate = null;
Run Code Online (Sandbox Code Playgroud)

要么

DateTime? nullDate;
Run Code Online (Sandbox Code Playgroud)