当日期时间为空时,如何将可为空的日期时间值转换为 string.empty?

How to convert a nullable datetime value to string.empty when datetime is null?

我正在读回一个可为 null 的 DateTime? 属性,然后将该值分配给短日期格式的字符串 属性。

我可以将日期时间值转换为短日期字符串并分配给 IT_Date_String 属性。但是,如果 IT_Date 为空,我不确定如何将 "" 值分配给字符串。

如何转换日期时间?值 string.empty 日期时间?是否为空?

这是linq中的赋值:

var status_list = query_all.ToList().Select(r => new RelStatus
{
    IT_Date_String = r.IT_Date.Value.ToString("yyyy-MM-dd") != null ? r.IT_Date.Value : null
}).ToList();

模型中的属性:

public DateTime? IT_Date { get; set; }
public string IT_Date_String { get; set; }

无论 IT_Date 是否真的有值,你都在调用 IT_Date.Value.ToString(...)

所以你需要把表达式反过来:

r.IT_Date.HasValue ? r.IT_Date.Value.ToString(...) : ""

这样 ToString() 只会在 IT_Date 有值时被调用。

您也可以在 getter 中实现此功能,如现已删除的评论中所述:

public string IT_Date_String 
{ 
    get
    {
        return IT_Date.HasValue ? IT_Date.Value.ToString(...) : "";
    }
}

这样您就不必在访问此模型的任何地方都重新实现逻辑,而且作为奖励,它只会在实际请求时执行。

还有no need to explicitly use String.Empty, the string "" will be interned to the same at runtime

在 C# 6 中,您可以这样做:

IT_Date_String = r.IT_Date?.ToString("yyyy-MM-dd") ?? String.Empty;

新的?检查左边的东西是否为空,如果是,表达式的计算结果为null。如果没有,它只是继续评估。

然后,?? 检查第一个表达式的结果是否为 null,如果 IT_Date 为空,则结果为 null。如果是,则评估为 String.Empty.

使用 C# 6.0 和 null 传播,您可以使用:

IT_Date_String = r.IT_Date?.ToString("yyyy-MM-dd") ?? String.Empty

这个可以在任何版本的框架中工作:

IT_Date_String=string.Format("{0:yyyy-MM-dd}",IT_Date);