在List<T>的ForEach()中设置多个属性?

149

给定一个类:

class foo
{
    public string a = "";
    public int b = 0;
}
然后是它们的通用列表:
var list = new List<foo>(new []{new foo(), new foo()});

如果我要在下面的List<T> ForEach()方法中分配多个属性,有没有比下面更简单的方法?希望我没有想复杂。

// one property - easy peasy
list.ForEach(lambda => lambda.a="hello!");
// multiple properties - hmm
list.ForEach(lambda => new Action(delegate() { lambda.a = "hello!"; lambda.b = 99;}).Invoke());

编辑:之前认为 ForEach() 是 LINQ 扩展方法,实际上它是 List<T> 的一部分,糟糕!

修改:之前误认为 ForEach() 是 LINQ 扩展方法,但实际上它是 List<T> 类的一部分。犯了一个错误!


我不知道你的答案,但我对这段代码的方法非常感兴趣。你能否定义一下什么是Action? - Anwar
4
虽然这并不重要,但这是 List<T> 上的一个方法,而不是 LINQ。另外,您可以使用 var list = new List<foo>() { new foo(), new foo() } 来创建列表。 - Marc
1
@Anwar http://msdn.microsoft.com/zh-cn/library/system.action.aspx - maxp
5个回答

340

您所需做的就是加入一些括号,以便您的匿名方法可以支持多个代码行:

list.ForEach(i => { i.a = "hello!"; i.b = 99; });

58

14
list.ForEach(lamba=>lambda.a="hello!"); 

变成

list.ForEach(item=>{
     item.a = "hello!";
     item.b = 99;
});

当然,你也可以在创建列表时分配它们,例如:

var list = new List<foo>(new []{new foo(){a="hello!",b=99}, new foo(){a="hello2",b=88}}); 

5
说实话,在这里真的没有必要使用List.ForEach:
foreach (var item in list) { item.a="hello!"; item.b=99; }

4
list.ForEach(i => i.DoStuff());
public void DoStuff(this foo lambda)
{
  lambda.a="hello!"; 
  lambda.b=99;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接