2017-03-08 34 views
1

我有一個關於使用實體框架的問題。避免空對象參考實體框架

我想訪問與另一個模型連接的模型的屬性。 但是,如果「父」對象是空的,??操作員不起作用。

例如: 我的客戶模型裏面有公司模型。 我想訪問Customer.Company.Name屬性。在Customer對象爲空的情況下,我得到空對象reff錯誤。

Sample of accessing the property on null object

如果對象是空我想它返回「」。 一種解決方案是寫喜歡獨來獨往代碼:

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

我知道這是不是乾淨的方式,但如果有喜歡的一個解決方案會有不錯?它也檢測父對象中的null。

+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

正如楊雷在評論中提到,你可以寫類似

var name = Customer?.Company?.Name; 

(如果你使用的是C#6)

+1

這實際上爲我的編程生活打開了全新的篇章:) 謝謝你。 這種傳播null到最後一個檢查。另外我的第一個例子是愚蠢的,因爲如果對象存在的話,'string'類型的Name永遠不會爲null。所以名字??「」是沒用的。 首先,我不知道我使用的是哪個版本。我讀過C#6與.NET4.6一起的地方,在我使用4.5.2的項目中,我不確定它是否可行。但它確實如此。 :) 非常感謝大家, – gtu

+0

有點偏離主題,但自從今天C#7發佈之後,我們還需要說「如果您使用的是C#6」 - 我從來沒有見過特別提到C#5,4等 –

+0

我剛纔補充說,確保......例如在工作中,我們的一些舊項目仍在使用.NET4.5。 –