私はlinq .Where()呼び出しのラムダ内で無名関数を使用するための構文を試してみようとしています。ラムダ内のC#匿名関数
私はリストから特定の項目をフィルタリングする場所を使用しています。
フィルタロジックの各部分をWhere内部に入れたいと思います。ロジックはフィルタ内でのみ有効なので、外部の関数を定義する必要はありません。ここで
は、簡略化さ&一般化した例です:
var filtered = myEnumerable.Where(item =>
item.PropertyA == 1 ||
item.PropertyB == 2 ||
item =>
{
var heavyResult = GetStuff(item); // Some heavyweight processing
return heavyResult.IsSomethingTrue() && heavyResult.IsSomethingElseTrue();
});
は、だから私は(どこで三行目をしたい)匿名関数の項目を取り、ブール値を返すように。
また、PropertyAおよびPropertyBのチェックの後に呼び出される関数は、いずれかの軽量比較が既にtrueと評価されている場合にGetStuff()を呼び出す必要を制限することを目的としています。
heavyResultから2つのプロパティを評価する必要があるため、すべてインラインで行うことはできません。
これは単純なはずですが、実験やグーグルで正しい構文を見つけることができないようです。
私はこれが本当のシナリオがあるかどうかを実際に懐疑的:
次のコードで、あなたはここで完全なコードです
からのオプションのうち1つだけを使用するのでしょうか?あなたはもっと簡単な方法でそれを行うことができます –
これを行うことができますが、私はあなたが*すべきなのは疑います。代わりに、そのメソッド内で何が起こるかを識別するためのわかりやすい名前を持つ名前付きメソッドを抽出するだけです。 – HimBromBeere