Ответ 1
Все, что вам нужно сделать, это ввести некоторые скобки, чтобы ваш анонимный метод мог поддерживать несколько строк:
list.ForEach(i => { i.a = "hello!"; i.b = 99; });
Учитывая класс:
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>
oops!
Все, что вам нужно сделать, это ввести некоторые скобки, чтобы ваш анонимный метод мог поддерживать несколько строк:
list.ForEach(i => { i.a = "hello!"; i.b = 99; });
Анонимный метод - ваш друг
list.ForEach(item =>
{
item.a = "hello!";
item.b = 99;
});
MSDN:
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}});
Честно говоря, действительно нет необходимости использовать List.ForEach здесь:
foreach (var item in list) { item.a="hello!"; item.b=99; }
list.ForEach(i => i.DoStuff());
public void DoStuff(this foo lambda)
{
lambda.a="hello!";
lambda.b=99;
}