Impostare più proprietà in un List <T> ForEach ()?


117

Dato un corso:

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

Quindi un elenco generico di loro:

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

Se devo assegnare più proprietà all'interno del seguente List<T> ForEach()metodo, c'è un modo più semplice per farlo di seguito? Spero di essere un po 'ottuso.

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

Modifica: il pensiero ForEach()era un metodo di estensione LINQ, quando in realtà fa parte di List<T>oops!


Non ho idea della tua risposta, ma sono molto interessato a questa metodologia di questo codice. Potresti definire cos'è un'azione?
Anwar

4
Non che sia importante, ma questo è un metodo List<T>e non è LINQ. Inoltre, puoi creare la tua lista convar list = new List<foo>() { new foo(), new foo() };
Marc

Risposte:


265

Tutto quello che devi fare è introdurre alcune parentesi in modo che il tuo metodo anonimo possa supportare più righe:

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


11
list.ForEach(lamba=>lambda.a="hello!"); 

diventa

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

Ovviamente puoi anche assegnarli quando crei l'elenco come:

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

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

3

Onestamente, non c'è davvero bisogno di usare List.ForEach qui:

foreach (var item in list) { item.a="hello!"; item.b=99; }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.