给出以下代码:
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();