2

ラムダを使用してリストでこれを行うにはどうすればよいですか?

List<Foo> list....// create and add a bunch of Foo
int seconds = 100;

list.FindAll(x=>(x.Seconds == 0).Seconds = seconds) // yes I know that wont work...

つまり、Seconds == 0であるすべてのfooオブジェクトを見つけて、値をローカル変数に変更します...

リストをループしたくない...単純なラムダメソッドでこれを行う方法があると確信しています...

助けていただければ幸いです

一方通行

4

2 に答える 2

11

まあ、あなたはすることができます:

list.FindAll(x => x.Seconds == 0)
    .ForEach(x => x.Seconds = seconds);

個人的には、副作用のある部分には明示的なループを使用したいと思います。

foreach (var x in list.Where(x => x.Seconds == 0))
{
    x.Seconds = seconds;
}

(ちなみに、これは参照型だと思います。値型の場合、機能しない理由は他にもいろいろあります。)

編集:あなたはこの問題に関するエリック・リッパートの考えも見てみたいと思うかもしれません。

于 2010-02-10T23:45:24.883 に答える