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()それは実際にList<T>oopsの一部であるときに、LINQ拡張メソッドであると考えられました!


答えの手がかりはありませんが、このコードの方法論に非常に興味があります。アクションを定義していただけませんか?
アンワール

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; }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.