Вместо того, чтобы встроить делегат для предиката, вы можете использовать его как тип, а затем передать его. Вот пример:
var list = new List<int>();
list.AddRange(Enumerable.Range(1, 10));
Predicate<int> p = delegate(int i)
{
return i < 5;
};
list.RemoveAll(p);
list.ForEach(i => Console.WriteLine(i));
РЕДАКТИРОВАТЬ: чтобы объявить предикат с существующим методом, вы должны использовать:
Predicate<int> p = IsLessThanFive;
public bool IsLessThanFive(int number)
{
return number < 5;
}
Альтернативы, которые более распространены, были бы:
list.RemoveAll(delegate(int i) { return i < 5; });
// or...
list.RemoveAll(i => i < 5);
РЕДАКТИРОВАТЬ: чтобы ответить на другой вопрос в комментарии к другому сообщению, делегат - это тип, который определяет сигнатуру метода и может использоваться для передачи методов другим методам в качестве аргументов. Если вы немного знакомы с C ++, они похожи на указатели на функции. Для получения дополнительной информации о делегатах проверьте эту страницу MSDN .