Как внедрить соответствующий алгоритм с использованием предикатов?

StackOverflow https://stackoverflow.com/questions/1297033

  •  18-09-2019
  •  | 
  •  

Вопрос

Я понимаю, как использовать делегатов, и я в порядке с выражениями 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top