Findall的搜索谓词如何在通用列表中工作

时间:2009-10-18 14:26:02

标签: c#

我能够使用findAll和它的谓词...但我想知道使它工作的机制。

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


List<BradCollection> SearchForMe(string str)
 {

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

SearchForMe中的“str”参数在哪里获得?

2 个答案:

答案 0 :(得分: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;
}

这会回答你的问题吗?

答案 1 :(得分:0)

它是从myList获得的,它可能实现IList<string>,它继承自IEnumerable<string>。它枚举myList中的每个项目,然后传递泛型参数以执行谓词。

如果你看,<T>上有Predicate个通用参数。

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