Как реализовать алгоритм сопоставления с использованием предикатов?

Я понимаю, как использовать делегаты, и я в порядке с лямбда-выражениями, чтобы использовать предикаты. Я пришел к тому, что хочу реализовать метод, который использует предикат в качестве аргумента, и не могу понять, как ссылаться на предикат, чтобы найти совпадения в моей коллекции:

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 ответ

Решение
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.

Другие вопросы по тегам