2016-08-20 59 views
0

我剛安裝ReSharper的,它已經改變了檢查空之前選擇了LINQ

if(dto != null) 
{ 
    return new test{ 
    obj1 = "", 
    obj2 = "", 
} 
} 

return dto?.Select(item => new test 
     { 
    return new test{ 
    obj1 = "", 
    obj2 = "", 
} 

我還沒有見過

dto?.Select 

試圖谷歌沒有運氣的意思..有人可以解釋一下,或者指出我正確的方向去玷污

我收集它簡單地檢查null?

+1

這被稱爲「空傳播」,這是C#6.0中的一項新功能。實際上,這與Linq無關。 – SimpleVar

回答

1

在C#6中新引入空傳播運算符。return dto?.Select ...表示如果dto爲null,則此語句將返回null否則將執行其餘部分。 另一個例子,只是補差,假設你有這inturn有巷(串)地址屬性Employee對象,郵遞區號等 所以,如果你需要得到的地址車道值,你可以這樣做:

var lane = employee?.Address?.Lane; 

如果員工或地址爲空,則返回null;否則返回車道值。

這可以通過多種方式進行組合,非常方便。 例如,

int someIntegerValue = someObject?.SomeIntValue ?? 0; 

基本上,你可以避免使用此功能的許多空檢查。

1

問號操作行爲上可爲空值和

x?<operation> 

轉化爲

x.HasValue ? x.Value.<operation> : null 

它基本上是說:「這樣做,如果我不是null;否則,讓我爲空」。

你在你的原代碼後有

return null 

聲明?我很驚訝,ReSharper會在其轉換中假定返回null。