如何使用Linq构建列表,同时做其他事情?

时间:2011-08-22 22:33:40

标签: c#

例如

          foreach (var item in List<int> a)
           {
            b.add(item);
            c+=item;
            dosomething();
           }

如何将其写入Linq表单?还是有必要?

我猜它有以下格式:var b = a.xxxx(x=>(c+=x;dosomething())).ToList()

2 个答案:

答案 0 :(得分:4)

由于LINQ实际上是一种查询语言,我认为在评估时使查询具有次要效果是不好的方式。我个人要么保留现状,要么将其更改为:

var c = a.Sum();
var b = a.ToList();
foreach(var item in a)
{
    DoSomething();
}

即使您最终多次遍历列表,也可以更轻松地浏览每行代码并立即知道它的作用。

答案 1 :(得分:3)

你可以这样做:

var b = a.Select(i => { c += i; dosomething(); return i; }).ToList();

请注意,这可能被认为是不好的做法。 foreach循环可能更具可读性,因此更易于维护。 (它也会更高效,因为没有为列表中的每个项目执行跳转指针指令。)