DateTime.为可空的datetime标记

本文关键字:datetime 标记 DateTime | 更新日期: 2023-09-27 18:10:24

在我的应用中,文章。DatePublished是一个可空的DateTime字段。现在我有下面的代码:

      list.Add(article.DatePublished.Ticks);

在这里我得到一个编译错误作为Ticks属性不与可空的DateTimes工作。

处理这个问题的一种方法是:
if (article.DatePublished != null)
      list.Add(((DateTime)article.DatePublished).Ticks);

这是有效的,但这是一个优雅的解决方案吗?或者我们能让它"更好"吗?

谢谢,

Vivek

DateTime.为可空的datetime标记

您需要获得DateTime?.Value属性。

if (nullableDate != null) // or if (nullableDate.HasValue)
    ticks = nullableDate.Value.Ticks;

您也可以使用nullableDate.GetValueOrDefault().Ticks,它将null日期规范化为DateTime的默认值,即DateTime.MinValue

正如Icarus提到的,我将使用:

if (article.DatePublished != null)
{
    list.Add(article.DatePublished.Value.Ticks);
}

甚至:

if (article.DatePublished.HasValue)
{
    list.Add(article.DatePublished.Value.Ticks);
}

取决于你想做什么,LINQ可能会给你更简单的代码:

var list = articles.Select(article => article.DatePublished)
                   .Where(date => date != null)
                   .Select(date => date.Ticks)
                   .ToList();
if (article.DatePublished.HasValue)
{
      list.Add(article.DatePublished.Value.Ticks);
}

如果您总是想添加一个值,包括DatePublished为null的默认值,您可以这样做

var date = article.DatePublished ?? new DateTime(whatever);
list.Add(date.Ticks);