¿Establecer varias propiedades en una List <T> ForEach ()?

117

Dada una clase:

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

Luego una lista genérica de ellos:

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

Si debo asignar varias propiedades dentro del siguiente List<T> ForEach()método, ¿hay una forma más sencilla de hacerlo que a continuación? Ojalá esté un poco tonto.

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

Editar: El pensamiento ForEach()era un método de extensión LINQ, cuando en realidad es parte de List<T>¡Ups!

maxp
fuente
No tengo ni idea de su respuesta, pero estoy muy interesado en esta metodología de este código. ¿Podrías definir qué es una acción?
Anwar
4
No es que importe, pero este es un método List<T>y no es LINQ. Además, puede crear su lista convar list = new List<foo>() { new foo(), new foo() };
Marc

Respuestas:

265

Todo lo que necesita hacer es introducir algunos corchetes para que su método anónimo pueda admitir varias líneas:

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

Se convierte

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

Por supuesto, también puede asignarlos cuando crea la lista como:

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

Honestamente, realmente no es necesario usar List.ForEach aquí:

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