給下面的一段代碼:委託組合不端行爲
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();
返回 「交流」, 「ABC」, 「BC」,並解釋「 C」這是同樣的結果
aux.Where(searchForC).ToList();
我的意思是,哪來‘第一查詢’和‘AB’和‘F’?
編輯:我用委託組合,因爲我想動態定義搜索模式!
EDIT2:對於新片的示例代碼主要編輯檢查,這個問題IM tryng解決
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();
我不知道是什麼'+'確實爲代表,但你應該使用'||'或''&&。 – 2013-03-06 21:00:28
@HighCore邏輯運算符「AND」和「OR」對代表無效 – Leonardo 2013-03-06 21:05:23
@Leonardo你是對的。那麼它應該是'.Where(x => SearchForA(x)|| searchForC(x))' – 2013-03-06 21:06:56