Definir várias propriedades em um List <T> ForEach ()?

117

Dada uma aula:

class foo
{
    public string a = "";
    public int b = 0;
}

Em seguida, uma lista genérica deles:

var list = new List<foo>(new []{new foo(), new foo()});

Se devo atribuir várias propriedades dentro do List<T> ForEach()método a seguir , há uma maneira mais simples de fazer isso abaixo? Espero estar sendo um pouco estúpido.

// 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());

Edit: O pensamento ForEach()era um método de extensão LINQ, quando na verdade é parte do List<T>ops!

maxp
fonte
Não tenho a menor idéia da sua resposta, mas estou muito interessado nesta metodologia deste código. Você poderia definir o que é uma ação?
Anwar
4
Não que isso importe, mas esse é um método List<T>e não é LINQ. Além disso, você pode criar sua lista comvar list = new List<foo>() { new foo(), new foo() };
Marc

Respostas:

265

Tudo que você precisa fazer é introduzir alguns colchetes para que seu método anônimo possa suportar várias linhas:

list.ForEach(i => { i.a = "hello!"; i.b = 99; });
Justin Niessner
fonte
11
list.ForEach(lamba=>lambda.a="hello!"); 

Torna-se

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

Claro, você também pode atribuí-los ao criar a lista como:

var list = new List<foo>(new []{new foo(){a="hello!",b=99}, new foo(){a="hello2",b=88}}); 
Richard Amigo
fonte
3
list.ForEach(i => i.DoStuff());
public void DoStuff(this foo lambda)
{
  lambda.a="hello!"; 
  lambda.b=99;
}
Khodor
fonte
3

Honestamente, realmente não há necessidade de usar List.ForEach aqui:

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