2015-10-16 28 views
33

C#6.0がリリースされて以来、私はnull条件付き演算子を非常に多く使用してきました。例:ASP.NET MVC Razorの新しいnull条件付き演算子

Model?.Person?.Zip 

しかし、今私は顧客がビュー内のドメインモデルを操作するソリューションを持っている状況があります。開発者を斧で狩っている間、私はビューでいくつかのヌルチェックをするほうが簡単だと分かっています。しかし

、私はカミソリでこれを行く:

@Model?.Person?.Zip 

マイModel?はダイナミックと見られますが、?は動的なものを破壊し、残りはテキストとして表示されています。

これをどのように解決しますか?いくつかの追加の完全性(私はMicrosoftのASP.NETチームで作業)については

+12

ちょっと推測@(Model?.Person?.Zip) –

+2

@DieterB Haha、それはとても簡単です...そして、それは働いていました。驚くばかり。私と同じくらいばかげた未来の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

ディーター・B(およびいくつかの他)として正しく@(Model?.Person?.Zip)は動作しますが、注意してください。

@(...)の構文は、どのコードが式として解析されるかという点ではるかに柔軟性がある「エスケープ構文」と考えることができます。

現在のバージョンのRazorがビルドされたとき、C#5だけが存在していたので、新しいC#6の構文は直接サポートされませんでした。

ASP.NETチームは、ASP.NET 5/MVC 6でサポートされているRazor v4の一部をRazor v3(ASP.NET 4.x/MVC 5)。

+0

私が正しい場合は、本当にエスケープ文字ではなく、むしろ "?"基本的なC#ではありません。 @()では、カミソリはC#コードであることを知っています。これはさまざまな行にまたがることができるので、これらのブロックで計算全体を行うことができます(1ページでもそうです)。 –

+0

確かに正しいです。エスケープ文字ではありません。これは、RazorパーサーがC#を解析しないために必要な場合を除いて、Razorパーサーが行う必要がある「思考」の量を単純化します。 '@(...) 'を使うことで、基本的な引用符/括弧のマッチングだけで済みます。 – Eilon