В основном это говорит: «Я даю вам это (s,b)
», и вы возвращаете мне s*b
или что-то еще, и если вы используете лямбду с выражениями, но это может быть что-то вроде этого: я даю вам это (s,b)
и сделайте что-нибудь с ними в блоке операторов, например:
{
int k = a+b;
k = Math.Blah(k);
return k;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~
Выражение Lambda
- это неназванный метод, написанный вместо экземпляра делегата. Компилятор немедленно преобразует лямбда-выражение либо в:
- Экземпляр делегата
- Дерево выражений
delegate int Transformer(int i);
class Test{
static void Main(){
Transformer square = x => x*x;
Console.WriteLine(square(3));
}
}
Мы могли бы переписать это так:
delegate int Transformer(int i);
class Test{
static void Main(){
Transformer square = Square;
Console.WriteLine(square(3));
}
static int Square (int x) {return x*x;}
}
Лямбда-выражение имеет следующий вид:
(parameters) => expression or statement-block
В предыдущем примере был один параметр x
, а выражение x*x
в нашем примере x соответствует параметру i, а выражение x*x
соответствует типу возвращаемого значения int
, поэтому совместимо с делегатом Transformer;
delegate int Transformer ( int i);
Код лямбда-выражения может быть блоком выражения вместо выражения. Мы можем переписать наш пример следующим образом:
x => {return x*x;}
Дерево выражений типа Expression<T>
, представляющее код внутри выражения lamda в модели с возможностью прохождения объекта. Это позволяет использовать лямбда-выражение позже во время выполнения (пожалуйста, проверьте «выражение запроса» для LINQ)