Встановити декілька властивостей у списку <T> ForEach ()?


117

Дано клас:

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

Потім загальний їх перелік:

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

Якщо я повинен призначити кілька властивостей у наступному List<T> ForEach()методі, чи є простіший спосіб зробити це нижче? Сподіваюся, я трохи товстий.

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

Редагувати: Думка ForEach()була методом розширення LINQ, коли вона насправді є частиною List<T>ой!


Я не маю підказки для вашої відповіді, але мені дуже цікава ця методологія цього коду. Скажіть, будь ласка, що таке дія?
Анвар

4
Мало того, що це має значення, але це метод List<T>і не LINQ. Крім того , ви можете створити свій список зvar list = new List<foo>() { new foo(), new foo() };
Marc

Відповіді:


265

Все, що вам потрібно зробити, - це ввести кілька дужок, щоб ваш анонімний метод міг підтримувати кілька рядків:

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


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

Стає

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

Звичайно, ви також можете призначити їх під час створення списку, наприклад:

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

Чесно кажучи, насправді не потрібно використовувати List.ForEach тут:

foreach (var item in list) { item.a="hello!"; item.b=99; }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.