Установить несколько свойств в List <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>упс!

MAXP
источник
Я не знаю вашего ответа, но меня очень интересует методология этого кода. Не могли бы вы определить, что такое действие?
Anwar
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;
}
Khodor
источник
3

Честно говоря, здесь действительно не нужно использовать List.ForEach:

foreach (var item in list) { item.a="hello!"; item.b=99; }
Heinzi
источник