Mehrere Eigenschaften in einer Liste festlegen <T> ForEach ()?

117

Bei einer Klasse:

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

Dann eine allgemeine Liste von ihnen:

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

Wenn ich innerhalb der folgenden Methode mehrere Eigenschaften zuweisen soll List<T> ForEach(), gibt es eine einfachere Möglichkeit, dies unten zu tun? Hoffentlich bin ich ein bisschen dick.

// 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()war eine LINQ-Erweiterungsmethode, wenn es tatsächlich Teil von List<T>oops ist!

maxp
quelle
Ich habe keine Ahnung für Ihre Antwort, aber ich bin sehr interessiert an dieser Methodik dieses Codes. Könnten Sie bitte definieren, was eine Aktion ist?
Anwar
4
Nicht, dass es wichtig wäre, aber dies ist eine Methode List<T>und nicht LINQ. Sie können Ihre Liste auch mitvar list = new List<foo>() { new foo(), new foo() };
Marc

Antworten:

263

Sie müssen lediglich einige Klammern einfügen, damit Ihre anonyme Methode mehrere Zeilen unterstützen kann:

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

Wird

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

Natürlich können Sie sie auch beim Erstellen der Liste wie folgt zuweisen:

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

Ehrlich gesagt, es ist wirklich nicht nötig, List.ForEach hier zu verwenden:

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