当datetime为null时,如何将可空的datetime值转换为string.empty?

Bri*_*n J 2 c# datetime nullable conditional-operator

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

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

你如何转换日期时间?datetime时为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();
Run Code Online (Sandbox Code Playgroud)

以及模型中的属性:

public DateTime? IT_Date { get; set; }
public string IT_Date_String { get; set; }
Run Code Online (Sandbox Code Playgroud)

Cod*_*ter 11

IT_Date.Value.ToString(...)无论IT_Date实际上是否有值,你都会调用它.

所以你需要转动表达式:

r.IT_Date.HasValue ? r.IT_Date.Value.ToString(...) : ""
Run Code Online (Sandbox Code Playgroud)

这种方式ToString()只有在IT_Date有值时才会被调用.

您也可以在getter中实现它,如现在删除的注释中所述:

public string IT_Date_String 
{ 
    get
    {
        return IT_Date.HasValue ? IT_Date.Value.ToString(...) : "";
    }
}
Run Code Online (Sandbox Code Playgroud)

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

没有必要明确使用String.Empty,字符串""将在运行时被实例化.


Swe*_*per 5

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

IT_Date_String = r.IT_Date?.ToString("yyyy-MM-dd") ?? String.Empty;
Run Code Online (Sandbox Code Playgroud)

新的?检查左边的东西是否为null,如果是,则表达式求值为null.如果没有,它只是继续评估.

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