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 */ );
【问题讨论】:
问题不清楚 没有 LINQForEach
方法。那是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` 语句以返回有关为每个列表对象进行的方法调用的数据?