Définir plusieurs propriétés dans un List <T> ForEach ()?

117

Étant donné une classe:

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

Puis une liste générique d'entre eux:

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

Si je dois attribuer plusieurs propriétés dans la List<T> ForEach()méthode suivante , y a-t-il un moyen plus simple de le faire ci-dessous? J'espère que je suis un peu épais.

// 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: Thought ForEach()était une méthode d'extension LINQ, alors qu'elle fait en fait partie de List<T>oops!

maxp
la source
Je n'ai aucune idée de votre réponse, mais je suis très intéressé par cette méthodologie de ce code. Pouvez-vous définir ce qu'est une action?
Anwar
4
Ce n'est pas que cela compte, mais c'est une méthode sur List<T>et n'est pas LINQ. Aussi, vous pouvez créer votre liste avecvar list = new List<foo>() { new foo(), new foo() };
Marc

Réponses:

265

Tout ce que vous avez à faire est d'introduire des crochets pour que votre méthode anonyme puisse prendre en charge plusieurs lignes:

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

Devient

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

Bien sûr, vous pouvez également les attribuer lorsque vous créez la liste comme:

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

Honnêtement, il n'est vraiment pas nécessaire d'utiliser List.ForEach ici:

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