2

ジェネリックリストをループして、いくつかの条件に基づいてメソッドを呼び出すにはどうすればよいですか?linq構文を使用したいのですが。もちろん、以下は機能しません。何か案は?

somelist.ForEach(i => i.DeptType == 1 && i != null () {MyMethod(someInt)});

それが不可能な場合、簡潔な構文を使用した次善の方法は何ですか?

4

5 に答える 5

6

Whereを使用して、選択するレコードを指定し、ForEachを使用してメソッドを実行してみてください。

somelist.Where(i => i.DeptType == 1 && i != null)
           .ToList()
           .ForEach( i=> MyMethod(i.someInt));
于 2012-06-05T18:54:35.227 に答える
4
//standard style ... since Linq is Functional/side-effects-free
foreach(var x in somelist.Where(i => i != null && i.DeptType == 1))
{
  SomeMethod(x);
}

//anon method style ... for those that must use ForEach
somelist.ForEach(i => {if (i != null && i.DeptType == 1) {MyMethod(someInt);}});
于 2012-06-05T19:05:26.743 に答える
1

ワンライナー LINQ クエリは魅力的かもしれませんが、通常、副作用のない操作 (クエリ プロジェクション、フィルタリングなど) に関連付けられています。あなたの場合、従来のforeachループを使用したほうがよい場合があります。

foreach (var i in somelist)
    if (i != null && i.DeptType == 1)
        MyMethod(someInt);

PS あなたの元の状態、i.DeptType == 1 && i != nullは間違って注文されました。コードは、 null チェックの前に実行されるNullReferenceExceptionため、引き続き発生します。i.DeptType i

于 2012-06-05T19:04:00.170 に答える
0

私は使用します:

    somelist.Where(q => q !=null)
    .Where(q => q.DeptType == 1)
    .Select(q => MyMethod(q));

結果のコレクションには、処理された元の値/メソッド呼び出しの戻り値のリストが含まれます。

于 2012-06-05T19:00:01.463 に答える
0

次のように、オブジェクトのフィールドにアクセスする前に必ず null チェックを行う必要があります。

somelist.Where(i => i != null && i.DeptType == 1).ToList().ForEach( i=> MyMethod(i.someInt));

上記の誰かが指摘したように、Where() 呼び出しから返された汎用 IEnumerable オブジェクトで ForEach() を呼び出すことはできません。結果を汎用リストに保存するには、最初に ToList() を呼び出す必要があります。上記のコードを更新して、その変更を含めました。

于 2012-06-05T19:02:42.237 に答える