在 List < 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>的一部分!

112973 次浏览

匿名方法是你的朋友

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

MSDN:

您所需要做的就是引入一些括号,这样您的匿名方法就可以支持多行:

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

老实说,真的没有必要使用 List:

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