Установить несколько свойств в списке ForEach ()?


дан класс:

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

Edit: Thought ForEach() был метод расширения LINQ, когда он на самом деле является частью List<T> упс!

5 91

5 ответов:

все, что вам нужно сделать, это ввести некоторые скобки так, чтобы ваш анонимный метод может поддерживать несколько строк:

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}}); 

честно говоря, там действительно нет необходимости использовать список.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;
}