【问题标题】:Does C# have a Linq method to run a function on the first element of a list, if it exists?C# 是否有 Linq 方法在列表的第一个元素上运行函数(如果存在)?
【发布时间】: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))

我试图坚持功能范例,并使用FirstFirstOrOptionalFirstOrDefault,似乎最终涉及大量 Null 检查或异常处理。

这样做的 Linq 单线方式是什么?

【问题讨论】:

  • 我不知道你是否正在正确地接近它。如果我需要对列表中的第一个元素执行某些操作,那么我将运行我的查询,然后如果不为空,则执行我需要执行的任何操作。在我看来,这样更容易阅读,也更容易调试。当然更容易进行单元测试。
  • 你当然可以创造为此的扩展方法,将您的空检查封装在那里。
  • 您确定您的查询至少会产生一个结果吗?如果是这样,SingleOrDefault() 比 FirstOrDefault() 更有意义。
  • .ForEach 一开始就不是 LINQ 方法,因为 LINQ 用于函数式转换并且这会修改状态(或者至少不返回任何内容)。 .ForEach 特定于List,与常规的foreach 语句相比提供的内容太少,我宁愿完全不使用它并保存委托。

标签: c# linq


【解决方案1】:
collection.Take(1).ToList().ForEach(o => DoSomethingWith(o));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-05
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多