[英]Entity Framework - casting property on null object doesn't throw an exception?
我正在查看一些舊代碼,並遇到了一個片段,這似乎會引發不必要的異常。 本質上,代碼(EntityFramework查詢)如下所示:
var serviceId = (Guid?) person.Services.FirstOrDefault(s => s.Name == "foo").Id;
bool inService = serviceId.HasValue;
也就是說,一個person
有多個服務分配給他們,我們將返回Name
為foo
的第一個服務。 然后,我們在該Service
實例上獲得Id屬性(一個Guid),並將其轉換為可為空的Guid。 最后,如果該可為空的Guid具有值,則此人必須在該服務中。
(注意:這不是我選擇上面的方式,這只是我正在使用的方式)
我有一種感覺,當此人不屬於名稱為“ foo”的服務(或者實際上根本沒有任何服務)時,此代碼僅引發異常,因為FirstOrDefault
調用將返回null
Service
實例,並訪問Id
物業只會拋出一個NPE。
我向原始開發人員詢問了此片段,並被告知要執行以下操作:
(T?) entity.<non-existent entity>.SomeProperty
只會返回一個空對象,而不是拋出NPE。 另外,這種“安全的空處理”類型在實體框架查詢中發生。
這似乎是違反直覺的,甚至感覺不到應該可行。 我曾嘗試對此進行研究,但至今仍未發現任何內容。 有人對這個有經驗么? 我100%高興地發現自己做錯了,並學習了一些新知識,但對我而言,這並不正確。
作為附錄,我確實嘗試通過使用EntityFramework連接在上面的Linqpad中運行查詢,並且確實在嘗試訪問null對象屬性時確實生成了NPE。
FirstOrDefault
將為對象返回null
。 EntityFramework將確保實體上屬於復雜類型的所有屬性都不為null
,但是它將為該查詢返回null
結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.