2009-10-18 49 views
-2

我能夠使用findAll及其謂詞...但我想知道使它工作的機制。Findall的搜索謂詞如何在泛型列表中工作

List<BradCollection> b = myList.FindAll(SearchForMe); 


List<BradCollection> SearchForMe(string str) 
{ 

    if (str.Contains("brad")) 
    return true; 
    else 
return false; 
} 

其中是SearchForMe中的「str」參數?

+0

返回類型應該是bool,而不是List <> – recursive 2009-10-18 14:44:45

+0

我對你的代碼感到困惑。這是一個字符串列表,還是一列BradCollections? – 2009-10-18 15:40:42

回答

1

我不完全知道你是問什麼;也許看一下FindAll的簡化實現會有所幫助。這不是的FindAll實際上是如何實現的,但它是足夠接近明白這是怎麼回事:

public delegate bool Predicate<A>(A arg); 
... 
public List<T> FindAll(Predicate<T> predicate) 
{ 
    var result = new List<T>(); 
    foreach (T item in this) 
     if (predicate(item)) 
      result.Add(item); 
    return result; 
} 

是否回答你的問題?

0

它從myList獲得,其可能實施IList<string>,其繼承自IEnumerable<string>。它枚舉了myList中的每個項目,然後傳遞通用參數來執行謂詞。

如果你看,在Predicate上有<T>通用參數。

http://msdn.microsoft.com/en-us/library/bfcke1bz.aspx