2017-03-08 3 views
1

Entity Frameworkの使用に関する質問があります。ヌルオブジェクトの説明を避けるエンティティフレームワーク

別のモデルに接続されているモデルのプロパティにアクセスしたいとします。 "親"オブジェクトがNullの場合、??オペレーターは助けにならない。

例: My Customerモデルの中にCompanyモデルがあります。 Customer.Company.Nameプロパティにアクセスしたいとします。 Customerオブジェクトがすべてnullの場合、nullオブジェクトreffエラーが発生します。オブジェクトがnullの場合

Sample of accessing the property on null object

私は "それが" 返すようにしたいと思います。私はこれがきれいな方法ではないですけど、のような解決策があるかどうかの素敵な存在だろう

(Customer!=null) ? ((Customer.Company!=null) ? Customer.Company.Name ?? "" : "") : "" 

??: 一つの解決策は、のような孤独のコードを書くことです親オブジェクト内のヌルも検出します。レイヤンは、(あなたが6 C#を使用している場合は)あなたが

var name = Customer?.Company?.Name; 

のようなものを書くことができますコメントで

+3

[C#6](https://msdn.microsoft.com/en -us/magazine/dn802602.aspx)は?を導入しました。演算子 –

+0

クリーンなソリューションの答えはnull演算子です(http://www.informit.com/articles/article.aspx?p=2421572)。残念ながら、それはC#バージョン6以来利用可能です。そうでなければ、既に書かれたものとは別の選択肢はありません。つまり、すべての親を明示的にチェックすることです。 – jambonick

+0

@jambonickまあ、いくつかの代替案があります。あなたは '?'のように少し行動するいくつかのヘルパーメソッドを書くことができます。 – Rawling

答えて

2

述べたように

+1

これは私のプログラミングの生活の中で全く新しい章を開いた:) ありがとうございました。 この種の例外は、最後のチェックにnullを伝播します。また、オブジェクトが存在する場合、 'string'型のNameは決してヌルではないので、私の最初の例はダムです。だから、名前は無駄です。 まず、どのバージョンを使用しているのかわかりませんでした。私はC#6に.NET4.6が付属していて、私のプロジェクトでは4.5.2を使用していて、動作するかどうかはわかりませんでした。しかしそれはそうです。 :) ありがとうございました – gtu

+0

話題が少し離れていますが、C#7が今日から来ているので、まだC#6であれば "C#5、4などを特に見たことはありません" –

+0

私はちょうどそれを追加しました...例えば、仕事では、古いプロジェクトのいくつかはまだ.NET4.5を使用しています。 –