如何使用谓词实现匹配算法?

时间:2009-08-18 23:02:02

标签: c# generics predicate

我理解如何使用委托,我可以使用lambda表达式来使用谓词。我想要实现一个使用谓词作为参数的方法,并且无法弄清楚如何引用谓词来查找我的集合中的匹配项:

private static T FindInCollection<T>(ICollection<T> collection, Predicate<T> match)
{
    foreach (T item in collection)
    {
        //So how do I reference match to return the matching item?
    }
    return default(T);
}

我想使用类似于:

的东西来引用它
ICollection<MyTestClass> receivedList = //Some list I've received from somewhere else
MyTestClass UsefulItem = FindInCollection<MyTestClass>(receivedList, i => i.SomeField = "TheMatchingData");

如果有人可以给我一个解释或指出我关于谓词实现的参考,我会很感激。那里的文档似乎都与传递谓词有关(我可以做得很好),而不是实际实现使用它们的功能......

由于

1 个答案:

答案 0 :(得分:7)

private static T FindInCollection<T>(ICollection<T> collection, Predicate<T> match)
{
    foreach (T item in collection)
    {
        if (match(item))
            return item;
    }
    return default(T);
}

您只需像任何其他委托一样使用谓词。它基本上是一个可以使用类型T的任何参数调用的方法,它将返回true。