2012-02-02 19 views
81

提供类:在列表中设置多个属性<T> ForEach()?

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>哎呀一部分!

+0

我对您的回答没有任何线索,但我对此代码的这种方法非常感兴趣。你能否定义一个动作是什么? – Anwar 2012-02-02 15:18:24

+4

这并不重要,但这是'List '上的一种方法,不是LINQ。另外,你可以用'var list = new List (){new foo(),new foo()};' – Marc 2012-02-02 15:18:46

+1

@Anwar创建你的列表@msnos http://enable.microsoft.com/zh-cn/library/system .action.aspx – maxp 2012-02-02 15:20:16

回答

187

所有你需要做的是推出一些支架,使您的匿名方法可以支持多行:

list.ForEach(i => { i.a = "hello!"; i.b = 99; }); 
9
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}}); 
0
list.ForEach(i => i.DoStuff()); 
public void DoStuff(this foo lambda) 
{ 
    lambda.a="hello!"; 
    lambda.b=99; 
} 
4

说实话,真的没有必要在这里使用List.ForEach :

foreach (var item in list) { item.a="hello!"; item.b=99; }