151 votes

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

Étant donné une classe :

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

Puis une liste générique de ceux-ci :

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

Si je dois attribuer multiples à l'intérieur des propriétés suivantes List<T> ForEach() existe-t-il une méthode plus simple que celle décrite ci-dessous ? J'espère que j'ai été un peu trop long.

// 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 réalité partie de List<T> oups !

0 votes

Je n'ai pas d'indice pour votre réponse, mais je suis très intéressé par la méthodologie de ce code. Pourriez-vous définir ce qu'est une action ?

4 votes

Cela n'a pas d'importance, mais il s'agit d'une méthode sur les List<T> et n'est pas LINQ. Vous pouvez également créer votre liste avec var list = new List<foo>() { new foo(), new foo() };

1 votes

344voto

Justin Niessner Points 144953

Tout ce que vous avez à faire, c'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; });

58voto

sll Points 30638

La méthode anonyme est votre amie

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

MSDN :

14voto

Richard Friend Points 7917
list.ForEach(lamba=>lambda.a="hello!"); 

Devient

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

Bien entendu, vous pouvez également les attribuer lors de la création de la liste, par exemple :

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

5voto

Heinzi Points 66519

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

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

4voto

Kheu Points 566
list.ForEach(i => i.DoStuff());
public void DoStuff(this foo lambda)
{
  lambda.a="hello!"; 
  lambda.b=99;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X