在ASP.NET MVC剃刀新的空条件运算符

问题描述 投票:42回答:4

如此以来,C#6.0出来的时候,我已经用空条件操作相当多了。例:

Model?.Person?.Zip

不过,我现在有一个情况我有凡客在视图域模型运行的解决方案。虽然我追捕开发商用斧头,我觉得很容易,只需做一些null检查在视图中。

然而,当我走这在剃刀:

@Model?.Person?.Zip

Model?被看作是动态的,但?打破了动态的东西,将其余的呈现为文本。

你如何解决这个问题?

c# asp.net-mvc razor c#-6.0
4个回答
65
投票

只是一个猜测

@(Model?.Person?.Zip)

18
投票

对于一些额外的完整性(我在ASP.NET团队在微软工作):

正如迪特尔·B(和其他一些)正确地指出,@(Model?.Person?.Zip)会工作。

所述@(...)语法可以被认为是作为一个“转义语法”,允许更大的灵活性,其中的代码将被解析为表达术语。

当剃刀的当前版本的建成,只有C#5在旁边,所以新的C#语法6并没有直接的支持。

在ASP.NET团队正在备份端口一些剃刀V4(在ASP.NET 5 / MVC使用6)支持C#6回剃刀V3(在ASP.NET 4.x版/ MVC 5中使用)。


5
投票

当你错过了从项目下面的NuGet包的一个或两个也会发生这种情况:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • Microsoft.Net.Compilers

1
投票

只要改变目标框架.NetFramework 4.7并安装使用NuGet包管理这些软件包:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • Microsoft.Net.Compilers

然后使用它像这样(注意括号允许充分C#语法,而不是局部的剃刀语法):

@(Model.Country?.Name)
© www.soinside.com 2019 - 2024. All rights reserved.