如何让 Null Coalesce 运算符在 MVC Razor ASP.NET 工作

本文关键字:Razor MVC ASP NET 工作 运算符 Null Coalesce | 更新日期: 2023-09-27 18:17:12

我有以下内容,但它

失败并出现NullReferenceException
<td>@item.FundPerformance.Where(xx => fund.Id == xx.Id).FirstOrDefault().OneMonth ?? -</td>

OneMonth定义为

public virtual decimal? OneMonth { get; set; }

并且其值在失败时为 null。

我以为 Null Coalesce 运算符会测试它是否为 null,如果是,则返回运算符右侧的值?

我需要更改什么才能完成这项工作?

如何让 Null Coalesce 运算符在 MVC Razor ASP.NET 工作

正如您所写的那样,剃刀语法以"一个月"结尾。这??被解释为文本。要将其解释为 razor,您必须将整个语句包装在 (( 中,如下所示:

<td>@(item.FundPerformance.Where(xx => fund.Id == xx.Id).FirstOrDefault().OneMonth ?? "-")</td>

这仍然会给你一个错误:左运算符是小数,右运算符是字符串。因此,您可以渲染零而不是"-"或使用三元运算符,其中OneMonth.Value.ToString((作为左值,"-"作为右值。

这与 MVC 或 Razor 无关。

FundPerformance.Where(xx => fund.Id == xx.Id).FirstOrDefault()

如果没有匹配的元素,将返回 null,null 没有一个月的 porperty,因此您将获得一个空引用异常。 您不能使用 ??运算符,因为它不是 OneMonth 为空,它是 FirstOrDefault() 的结果。

若要进行测试,请将代码更改为

FundPerformance.Where(xx => fund.Id == xx.Id).First().OneMonth ?? -</td>

如果您收到"序列不包含任何元素"异常,那么您就知道这是您的问题。