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