次のコードを与えます。
List<string> aux = new List<string>();
aux.Add("a");
aux.Add("ab");
aux.Add("ac");
aux.Add("abc");
aux.Add("b");
aux.Add("bc");
aux.Add("c");
aux.Add("e");
aux.Add("f");
Func<string, bool> searchForA = (f => f.Contains("a"));
Func<string, bool> searchForC = (f => f.Contains("c"));
Func<string, bool> searchForF = (f => f.Contains("f"));
誰かこの電話の理由を説明してくれませんか
aux.Where(searchForA + searchForF + searchForC).ToList();
「ac」、「abc」、「bc」、および「c」を返します。これは、次と同じ結果です。
aux.Where(searchForC).ToList();
つまり、最初のクエリの "a" と "ab" と "F" はどこですか?
編集:検索パターンを動的に定義したいので、デリゲートの組み合わせを使用しました!
EDIT2: 新しいコード例の主要な編集チェック、これは私が解決しようとしている問題です
string[] searchFor = "a c f".Split(' ');
Func<string, bool>[] delegates = new Func<string, bool>[searchFor.Length];
for (int i = 0; i < searchFor.Length; i++)
{
string search = searchFor[i]; // Make sure the lambda does not capture a loop variable!
delegates[i] = new Func<string, bool>(f => f.Contains(search));
}
List<string> aux = new List<string>();
aux.Add("a");
aux.Add("ab");
aux.Add("ac");
aux.Add("abc");
aux.Add("b");
aux.Add("bc");
aux.Add("c");
aux.Add("e");
aux.Add("f");
List<string> result = aux.Where((Func<string, bool>)Delegate.Combine(delegates)).ToList();