C#6.0引入了空條件運算符,這是一個很大的勝利。如何爲類似於空條件運算符的集合創建空條件運算符?
現在我想要一個運算符,其行爲與它相似,但對於空集合。
Region smallestFittingFreeRegion = FreeRegions
.Where(region => region.Rect.W >= width && region.Rect.H >= height)
.MinBy(region => (region.Rect.W - width) * (region.Rect.H - height));
現在這個炸燬如果Where
返回一個空IEnumerable
,因爲MinBy
(從MoreLinq
)拋出一個異常,如果集合爲空。
在C#6.0之前,這可能會通過添加另一個擴展方法MinByOrDefault
來解決。
我想重新寫這樣的:.Where(...)?.MinBy(...)
。但這不起作用,因爲.Where
返回空收集而不是null
。
現在可以通過爲IEnumerable
引入.NullIfEmpty()
擴展方法來解決這個問題。抵達.Where(...).NullIfEmpty()?.MinBy()
。
最終這似乎很尷尬,因爲返回空收集一直比返回null
更可取。
還有其他更優雅的方式來做到這一點嗎?
我假設你不會在'if'語句中使用'Any'調用「elegant」? –
您提出了兩種簡潔易懂的解決方案。你想要多優雅? –
你試過這個嗎? '.DefaultIfEmpty()。MinBy(region =>(region?.Rect?.W - width)*(region?.Rect?.H - height))' – Enigmativity