[英]How to avoid getting "possible "null"assignment to a non-nullable entity"
很抱歉這個尷尬的例子,但我想盡可能地保持重點
比方說,我已經解析了一個 json 文件,它給出了下面的層次結構
var customers = myObj.SubObj?.CustomerList.EmptyIfNull();
var plusCustomers = customers.Where(...) // Resharper warning
myobj 不能是 null SubObject 有時可以是 null
我有一個擴展方法
IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> enumerable) => enumerable ?? Enumerable.Empty<T>();
所以我希望 plusCustomers 行是安全的(空列表而不是 null)。 但我收到警告
可能的“空”分配給不可為空的實體
如果我將第一行替換為
var customers = myObj.SubObj.CustomerList.EmptyIfNull();
我擺脫了警告,但這是不正確的。 我怎樣才能說服 Resharper 這沒問題?...或者我錯了?
您可以添加括號:
(myObj.SubObj?.CustomerList).EmptyIfNull();
如果 LHS 操作數為 null,null 鏈接 ( ?.
) 的作用是評估對 null 的整個成員訪問鏈,而不是僅評估對 null 的單個成員訪問。例如,考慮一長串成員訪問abc.def
。 如果只有a
可以為 null,則您只需要編寫?
在這之后a
安全的。 如果a
是 null,它不只是a?.b
計算為 null,因為在那種情況下你必須寫?
在每個成員訪問之后都是安全的,這有點煩人。
因此,如果沒有括號,整個成員訪問權限由於?.
,不管你最后叫什么。
通過添加括號,您打破了成員訪問鏈,因此myObj.SubObj?.CustomerList
是可以為 null 的類型,並按預期方式調用EmptyIfNull
- 返回EmptyIfNull
應返回的任何類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.