Предикат - это делегат, который принимает параметр и возвращает логическое значение.
Мы можем сделать то же самое следующими способами
1) Использование встроенного лямбда-выражения
RemoveAll(p=> p.x > 2);
2) Использование анонимной функции
RemoveAll(delegate(myObject obj){
return obj.x >=10;
})
3) Использование предиката делегата
Predicate<myObject> matches = new Predicate<myObject>(IsEmployeeIsValid);
RemoveAll(matches);
Predicate<Foo> matches = delegate(Foo o){ return o.X >= 20; });
RemoveAll(matches);
3) Явное объявление делегата и указание на функцию
public delegate bool IsInValidEmployee (Employee emp);
IsInValidEmployee invalidEmployeeDelegate = new IsInValidEmployee(IsEmployeeInValid);
myObjects.RemoveAll(myObject=>invalidEmployeeDelegate(myObject);
// Фактическая функция
public static bool IsEmployeeInValid(Employee emp)
{
if (emp.Id > 0 )
return true;
else
return false;
}