Это, безусловно, 2 отдельных вопроса.
Параметры делегатов
Типы делегатов всегда указывают все параметры и возвращаемые типы.
Метод FindAll
имеет следующую подпись :
public List<T> FindAll(Predicate<T> match)
.
Predicate<T>
является делегатом со следующей подписью :
public delegate bool Predicate<in T>(T obj)
.
Когда FindAll
вызывает предикат, он должен предоставить T obj
, например: match(item)
, который вернет bool
.
Лямбда-выражения
Лямбда-выражения - это действительно классная особенность .NET 4. Они очень отличаются от лямбда-функций, хотя синтаксис идентичен !
По сути, когда вы пишете лямбда-функцию, она компилируется так же, как и любой другой код.Однако когда вы пишете лямбда-выражение, компилятор фактически генерирует набор метаданных , который полностью описывает код.Обычно код никогда не выполняется.
Это очень полезно в сценариях, таких как событие PropertyChanged
, потому что это событие должно знать имя свойства, а не только значение.Лямбда-выражение может быть проанализировано, и оно будет указывать, что изменяемое свойство равно "QuantitySaved"
.
Использование лямбда-выражений позволяет писать строго типизированный код, но позволяет анализировать, а не выполнять этот код.Это отличная особенность языка и обеспечивает множество замечательных функций, таких как LINQ to SQL, но, безусловно, сложно понять!