2012-02-02 10 views
81

Data una classe:Impostare più proprietà in un elenco <T> ForEach()?

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

Poi un elenco generico di loro:

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

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

// 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: Pensiero ForEach() era un metodo di estensione LINQ, quando in realtà è parte di List<T> oops!

metodo
+0

Non ho alcun indizio per la tua risposta, ma sono molto interessato a questa metodologia di questo codice. Potresti definire cosa è un'azione? – Anwar

+4

Non è importante, ma questo è un metodo su 'Lista ' e non è LINQ. Inoltre, puoi creare la tua lista con 'var list = new List () {new foo(), new foo()};' – Marc

+1

@Anwar http://msdn.microsoft.com/en-us/library/system .action.aspx – maxp

risposta

187

Tutto quello che dovete fare è introdurre alcune staffe in modo che il metodo anonimo in grado di supportare più linee:

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

Diventa

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

Naturalmente è anche possibile assegnare loro quando si crea la lista come:

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

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

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