您的代码有语法错误,因为 DateTime 可以为空?没有采用字符串格式参数的ToString() 重载,因此您需要将.Value 从可空值中取出以将可空值转换为正常的日期时间,然后才能对其进行格式化
要回答您关于 null 条件的具体问题,可以这样:
(movie.ReleaseDate.HasValue ? movie.ReleaseDate.Value.ToString("dd-MMM-yyyy") : "Not Yet"
Alsein 使用 null 合并的形式比使用 null 条件更具可读性,但他选择说如果电影的发行日期为空,则说今天发行的电影对我来说没有意义。我想说我们需要一种方法,只有当它有一个值时才将其转换为日期字符串,如果它为空,则将其转换为其他字符串。
考虑:
movie.ReleaseDate?.ToString("dd-MMM-yyyy") ?? "Not Yet"
如果发布日期为 null,则不会调用 ToString,并且 c# 将直接跳到 ??,结果为 null。 ?? 然后会将 null 转换为“Not Yet”字符串,我认为 null 发布日期可能意味着......
? 还可以与 nullable 一起使用,如果它确实有值,则将其变成 DateTime,这就是为什么早期的“DateTime? 没有ToString(string)" 不适用;在评估 movie.ReleaseDate? 时,结果要么是 null 要么是正常的 DateTime,其 ToString 采用格式
?? 因此是一种为调用链提供默认值的好方法,其中任何一个调用都可能为空,并且可以通过? 运算符的多次使用来防止抛出空引用:
notnull.MaybeNull?.MayAlsoBeNull?.Something ?? DefaultThing
还要考虑您是否应该使用这种固定方式为用户设置日期格式,或者使用他们文化的典型日期格式并以不同的格式向不同的网站访问者显示日期是否更有意义
See something like this 或 perhaps this 了解如何使您的代码使用用户的语言声明为日期和数字等内容提供特定于文化的格式