在Nullable的情况下如何格式化DateTime?

时间:2019-01-12 17:17:16

标签: c# asp.net-mvc

如何为可空的.Tostring()获得Datetime?重载?

例如

public DateTime BirthDate { get; set; }

在上述代码的情况下,我可以格式化BirthDate。

但是在以下代码的情况下,我无法获得.ToString()方法的所有重载。

public DateTime? BirthDate { get; set; }

我实际上是想将格式应用于Razor语法中的BirthDate吗?

例如

<li><b>BirthDate</b> : @Model.BirthDate.ToString("dd/MM/yyyy")</li> // But this is not working.

在Nullable的情况下如何为BirthDate应用格式?

1 个答案:

答案 0 :(得分:5)

您可以使用null-conditional Operators(自C#6.0起可用)。

string s = BirthDate?.ToString("dd/MM/yyyy");

如果null没有值(为空),则返回BirthDate,即在这种情况下不会调用ToString。如果要在这种情况下返回文本,则可以使用null-coalescing operator

string s = BirthDate?.ToString("dd/MM/yyyy") ?? "none";

或者您可以使用ternary conditional operator(适用于较旧的C#版本)

string s = BirthDate.HasValue ? BirthDate.Value.ToString("dd/MM/yyyy") : "none";

在Razor中,将其用括号括起来(?似乎使Razor感到困惑):

<li><b>BirthDate</b> : @(Model.BirthDate?.ToString("dd/MM/yyyy"))</li> 

<li>
    <b>BirthDate</b> : @(BirthDate.HasValue ? BirthDate.Value.ToString("dd/MM/yyyy") : "")
</li>