将foreach循环重构为List <t> .ForEach(...)

时间:2016-05-02 13:06:44

标签: c# list foreach

假设:

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,它似乎效率低于原始效果。

有没有办法将两个单独行中的两个动作合并为一个声明?

2 个答案:

答案 0 :(得分:10)

你可以拿下总和:

maxRows += _data.Sum(obj => 1 + obj.Parameters.Count())

答案 1 :(得分:4)

您可以在同一循环中执行此操作。

_data.ForEach(feObj => 
 {
    maxRows++;
    feObj.Parameters.ForEach(feParam => maxRows++);
 });

此外,如果你只是添加计数,你应该像@Rob回答的那样。如果有任何其他逻辑,你可以把它放在括号内。