Как внедрить соответствующий алгоритм с использованием предикатов?
Вопрос
Я понимаю, как использовать делегатов, и я в порядке с выражениями 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");
Если кто -то может дать мне объяснение или указать мне на ссылку, касающуюся реализации предикатов, я бы признателен. Документация, кажется, связана с проходящими предикатами (что я могу сделать очень хорошо), не реализуя функциональность, которая их использует ...
Спасибо
Решение
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.