LINQ ForEach 可以有 if 语句吗?

Posted

技术标签:

【中文标题】LINQ ForEach 可以有 if 语句吗?【英文标题】:Can LINQ ForEach have if statement? 【发布时间】:2013-07-01 22:23:00 【问题描述】:

是否可以在 LINQ ForEach 调用中添加if-statement?

sequence.Where(x => x.Name.ToString().Equals("Apple"))
        .ToList()
        .ForEach( /* If statement here */ );

【问题讨论】:

问题不清楚 没有 LINQ ForEach 方法。那是List的方法。 您想在if 中添加什么不能用作Where 中的谓词? 【参考方案1】:

旧线程,但我认为语法更简洁

foreach(var item in sequence.Where(s => s.Name.ToString() == "Apple"))

 // do whatever

【讨论】:

没错,为了简单起见,应该使用 Linq 与传统的 foreach,即应该使用看起来更干净、更容易理解的任何东西。 如果带有 lambda 的 Linq 可以将长 foreach 缩小到单行,则可以使用它。但如果 Linq 变得太不可读,那么可以使用传统的 foreach 来获得更好的可读性。【参考方案2】:

是的,在 ForEach 中常用的 if 语句如下:

sequence.Where(x => x.Name.ToString().Equals("Apple"))
    .ToList()
    .ForEach( x =>
     
       if(someCondition)
       
         // Do some stuff here.
         
     );

【讨论】:

【参考方案3】:

您可以执行以下操作...

List.Where(x => x.Name.ToString().Equals("Apple").ToList()
    .ForEach( x =>  if(x.Name == "") );

【讨论】:

【参考方案4】:

是的,它需要一个 lambda 表达式,因此您可以在其中放入任何有效的 c# 表达式

【讨论】:

我不会说 any...有些构造是表达式 API 无法表示的。 哦,等一下,对不起,我的评论不适用于这里。我们在这里创建一个委托,而不是一个表达式。 IIRC,相同的限制不会影响委托,可以使用任何构造。

以上是关于LINQ ForEach 可以有 if 语句吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 linq `ForEach` 语句以返回有关为每个列表对象进行的方法调用的数据?

Foreach 使用 linq 删除

sql to linq中的if存在语句

在if语句中有两个foreach循环

SwiftUI:是不是可以使用 ForEach + ContextMenu + if 语句?

将 foreach 转换为 LINQ [重复]