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

max*_*axp 109 c# linq

给出一个类:

class foo
{
    public string a = "";
    public int b = 0;
}
Run Code Online (Sandbox Code Playgroud)

然后是它们的通用列表:

var list = new List<foo>(new []{new foo(), new foo()});
Run Code Online (Sandbox Code Playgroud)

如果我要在以下方法中分配多个属性,下面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());
Run Code Online (Sandbox Code Playgroud)

编辑:思想ForEach()是一个LINQ扩展方法,当它实际上是List<T>oops 的一部分!

Jus*_*ner 242

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

list.ForEach(i => { i.a = "hello!"; i.b = 99; });
Run Code Online (Sandbox Code Playgroud)


sll*_*sll 41

匿名方法是你的朋友

list.ForEach(item => 
              { 
                  item.a = "hello!"; 
                  item.b = 99; 
              }); 
Run Code Online (Sandbox Code Playgroud)

MSDN:


Ric*_*end 11

list.ForEach(lamba=>lambda.a="hello!"); 
Run Code Online (Sandbox Code Playgroud)

list.ForEach(item=>{
     item.a = "hello!";
     item.b = 99;
});
Run Code Online (Sandbox Code Playgroud)

当然,您也可以在创建列表时指定它们,例如:

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


Hei*_*nzi 5

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

foreach (var item in list) { item.a="hello!"; item.b=99; }
Run Code Online (Sandbox Code Playgroud)