Ustawić wiele właściwości w List <T> ForEach ()?


117

Biorąc pod uwagę klasę:

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

Następnie ich ogólna lista:

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

Jeśli mam przypisać wiele właściwości w poniższej List<T> ForEach()metodzie, czy istnieje prostszy sposób, aby to zrobić poniżej? Mam nadzieję, że jestem trochę gruba.

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

Edycja: Myśl ForEach()była metodą rozszerzenia LINQ, podczas gdy w rzeczywistości jest częścią List<T>oops!


Nie mam pojęcia o twojej odpowiedzi, ale jestem bardzo zainteresowany tą metodologią tego kodu. Czy mógłbyś zdefiniować, czym jest akcja?
Anwar

4
Nie ma to znaczenia, ale jest to metoda włączona, List<T>a nie LINQ. Możesz także utworzyć swoją listę zvar list = new List<foo>() { new foo(), new foo() };
Marc

Odpowiedzi:


265

Wszystko, co musisz zrobić, to wprowadzić kilka nawiasów, aby Twoja anonimowa metoda obsługiwała wiele wierszy:

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


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

Staje się

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

Oczywiście możesz je również przypisać podczas tworzenia listy, na przykład:

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

Szczerze mówiąc, naprawdę nie ma potrzeby używania List.ForEach tutaj:

foreach (var item in list) { item.a="hello!"; item.b=99; }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.