Как реализовать алгоритм сопоставления с использованием предикатов?
Я понимаю, как использовать делегаты, и я в порядке с лямбда-выражениями, чтобы использовать предикаты. Я пришел к тому, что хочу реализовать метод, который использует предикат в качестве аргумента, и не могу понять, как ссылаться на предикат, чтобы найти совпадения в моей коллекции:
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.