如何在Lambda表达式中实现条件排序以精简冗余代码?
精简冗余代码的几种方法
你可以通过以下几种方式减少代码冗余:
拆分排序与投影逻辑
先根据result的值选择对应的排序方式,再统一执行Select操作,避免重复编写投影代码:var sortedPeople = result ? people.OrderByDescending(person => person.Name) : people.OrderBy(person => person.Name); var query = sortedPeople.Select(person => person.Name);直接使用条件运算符链式调用
把条件判断嵌入链式调用中,代码更紧凑:var query = result ? people.OrderByDescending(person => person.Name).Select(person => person.Name) : people.OrderBy(person => person.Name).Select(person => person.Name);通过委托抽象排序逻辑
如果后续还有更多类似的排序场景,可以用委托封装排序方法,提升代码复用性:Func<IEnumerable<Person>, IOrderedEnumerable<Person>> sortFunc = result ? (Func<IEnumerable<Person>, IOrderedEnumerable<Person>>)(p => p.OrderByDescending(x => x.Name)) : p => p.OrderBy(x => x.Name); var query = sortFunc(people).Select(person => person.Name);
其中第一种方法兼顾简洁性与可读性,是最常用的优化方式。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

