繁体   English   中英

日期类型的空条件运算符?

[英]null-conditional operator for date type?

在我的 model 中,我有这个属性

public DateTime? ReleaseDate { get; set; }

然后,在我的 Blazor razor 页面中,我有以下代码,它有语法错误

<td>@movie.ReleaseDate.ToString("dd-MMM-yyyy")</td>

问题是因为 ReleaseDate 可以为空,但我的问题是如何使用空条件运算符? 如果 ReleaseDate 为 null,则获取系统当前日期?

您的代码有语法错误,因为可以为空的 DateTime? 没有采用字符串格式参数的ToString()重载,因此您需要将.Value从可空值中取出以将可空值转换为正常的 DateTime ,然后才能对其进行格式化

要回答有关 null 条件的具体问题,这将类似于:

(movie.ReleaseDate.HasValue ? movie.ReleaseDate.Value.ToString("dd-MMM-yyyy") : "Not Yet"

Alsein 使用 null 合并的形式比使用 null 有条件的可读性强得多,但他选择说一部电影是今天发行的,如果它的发行日期是 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 或带有格式的 ToString 的普通 DateTime

?? 因此,这是为一系列调用提供默认值的好方法,其中任何一个都可能是 null 并且通过多次使用? 操作员:

notnull.MaybeNull?.MayAlsoBeNull?.Something ?? DefaultThing

还要考虑您是否应该使用这种固定方式为用户格式化日期,或者使用他们文化的典型日期格式并将日期以不同格式呈现给不同的网站访问者是否更有意义

有关如何使您的代码使用用户的语言声明来为日期和数字等内容提供特定于文化的格式, 请参阅类似的内容或可能的内容

a?? b a?? b (空合并运算符)是a == null? a: b a == null? a: b ,这意味着如果anull ,则返回 b,否则返回 a。

此运算符要求a的类型为T? Nullable<T> (又名可空值类型)和可空引用类型都被接受)并且bTT? . 如果 b 是T? , 这个运算符的返回类型也是T? , 这意味着?? 可以被锁住。

a?? b?? c?? d a?? b?? c?? d表示先返回不是 null 的那个。

(movie.ReleaseDate ?? DateTime.Now).ToString("dd-MMM-yyyy")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM