【发布时间】:2022-12-01 01:03:23
【问题描述】:
我正在寻找类似 ForEach 方法的东西,但它只在一个元素上运行。
// Do something with every element.
SomeList.ForEach(o => DoSomethingWith(o))
// Do something with just the first element, if any, or nothing at all for an empty list.
SomeLine.ForFirst(o => DoSomethingWith(o))
我试图坚持功能范例,并使用First、FirstOrOptional、FirstOrDefault,似乎最终涉及大量 Null 检查或异常处理。
这样做的 Linq 单线方式是什么?
【问题讨论】:
-
我不知道你是否正在正确地接近它。如果我需要对列表中的第一个元素执行某些操作,那么我将运行我的查询,然后如果不为空,则执行我需要执行的任何操作。在我看来,这样更容易阅读,也更容易调试。当然更容易进行单元测试。
-
你当然可以创造为此的扩展方法,将您的空检查封装在那里。
-
您确定您的查询至少会产生一个结果吗?如果是这样,SingleOrDefault() 比 FirstOrDefault() 更有意义。
-
.ForEach一开始就不是 LINQ 方法,因为 LINQ 用于函数式转换并且这会修改状态(或者至少不返回任何内容)。.ForEach特定于List,与常规的foreach语句相比提供的内容太少,我宁愿完全不使用它并保存委托。