ASP.NET MVC Razor中的新的空条件运算符

Lar*_*ard 44 c# asp.net-mvc razor c#-6.0

所以自从C#6.0问世以来,我一直在使用null条件运算符.例:

Model?.Person?.Zip
Run Code Online (Sandbox Code Playgroud)

但是,我现在有一种情况,我有一个解决方案,客户在视图中的域模型上运行.虽然我会用斧头追捕开发人员,但我发现在视图中进行一些空检查会更容易.

但是,当我在Razor中使用它时:

@Model?.Person?.Zip
Run Code Online (Sandbox Code Playgroud)

Model?被看作是动态的,但?打破了动态的东西,休息被渲染为文本.

你是如何解决这个问题的?

Die*_*r B 66

只是一个猜测

@(Model?.Person?.Zip)
Run Code Online (Sandbox Code Playgroud)


Eil*_*lon 18

为了一些额外的完整性(我在Microsoft的ASP.NET团队工作):

正如Dieter B(以及其他一些人)正确指出的那样,@(Model?.Person?.Zip)会有效.

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

当构建当前版本的Razor时,只有C#5存在,因此不直接支持新的C#6语法.

ASP.NET团队希望将一些支持C#6的Razor v4(用于ASP.NET 5/MVC 6)支持回Razor v3(用于ASP.NET 4.x/MVC 5).


sun*_*r20 6

当您从项目中丢失以下一个或两个以下NuGet软件包时,也会发生这种情况:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • Microsoft.Net。编译器