2015-10-16 35 views
33

因此,自從C#6.0出來以後,我一直在使用空條件運算符。例如:ASP.NET MVC中新的空條件運算符Razor

Model?.Person?.Zip 

不過,我現在有一個情況我有凡客在視圖域模型運行的解決方案。雖然我會用斧頭追捕開發人員,但我發現在視圖中做一些空檢查比較容易。

不過,我走的時候這剃刀:

@Model?.Person?.Zip 

Model?被看作是動態的,但?打破了動態的東西,將其餘的呈現爲文本。

你如何解決這個問題?

+12

只是一個猜測@(型號?.Person?.Zip) –

+2

@DieterB哈哈,這是如此簡單...而且工作。真棒。你能否爲所有與我一樣愚蠢的未來Google員工提供答案? –

+0

完成。 Thnx的確認;-) –

回答

52

只是一個猜測

@(Model?.Person?.Zip) 
+1

不適用於我 –

+0

你能提供更多關於什麼是不工作的信息?你的代碼的例子? –

+0

這可能會解決Kees問題:http://stackoverflow.com/questions/27968963/c-sharp-6-0-features-not-working-with-visual-studio-2015 –

17

對於一些額外的完整性(我在ASP.NET團隊工作在微軟):

正如迪特爾·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)。

+0

如果我是正確的,它是不是真正的逃避角色,而是那個「?」不是基本的C#。使用@(),剃刀知道括號內的所有內容都是C#代碼。它可以擴展到各種各樣的行,所以你可以在這些塊中完成整個計算(是的,甚至在1頁上) –

+0

確實你是對的,它根本不是一個「轉義字符」。它只是簡化了Razor解析器需要做多少「思考」,因爲它不會解析C#,除非必須。通過使用'@(...)'它只需要做基本的引用/ paren匹配,以及更多。 – Eilon