【发布时间】:2016-08-27 06:19:24
【问题描述】:
给定:
foreach (var obj in _data)
{
maxRows++;
foreach (var param in obj.Parameters)
maxRows++;
}
我正在尝试将其转换为(最好)单个语句。不是特别出于任何原因,只是好奇它是否足够容易在心理上解析,如果可能的话。
_data.ForEach(feObj => maxRows++);
_data.ForEach(feObj => feObj.Parameters.ForEach(feParam => maxRows++));
这似乎完成了同样的事情,尽管它似乎比原来的效率要低,因为要多迭代一次 _data。
有没有办法将两行中的两个动作组合成一个语句?
【问题讨论】:
-
ForEach不是 Linq。但你可以做_data.ForEach(obj => {maxRows++; obj.Parameters.ForEach(param => maxRows++);}); -
@Kritner,LINQ 只是一个有用的扩展库,例如
Select、Where、First、Any,它们可以针对任何IEnumerable<T>运行。在List<T>上有一个 扩展ForEach,但它不在LINQ 库中,所以它不是真正的LINQ 扩展。 LINQ 中的Q代表查询,这是库提供的。ForEach通常不是查询,而是对集合中的每个项目执行的操作。这就是为什么它不在基础LINQ库中。 -
@Kritner 我猜你可以称它为函数式方法?就我个人而言,我认为这是可憎的,因为它真的不比普通的
foreach好。您可以阅读this 以了解为什么没有“Linq”ForEach。 -
@Jonesopolis
ForEach不是List<T>的扩展方法。这只是一个普通的类方法。 -
@Jonesopolis 我完全相信你。