На этом шаге мы приведем общие сведения о лямбда-выражениях.
У анонимных методов есть конкурент - это лямбда-выражения. Лямбда-выражение представляет собой блок программного кода, который определяет метод и предназначен для присваивания в качестве значения переменной типа делегата. В этом смысле и лямбда-выражения, и анонимные методы служат одной цели. Разница лишь в том, как эта цель достигается.
Итак, лямбда-выражение определяет метод. Как же это происходит? Синтаксис описания лямбда-выражения идеологически близок к описанию анонимного метода, но в несколько упрощенном виде. Условно лямбда-выражение можно рассматривать как состоящее из двух частей (левой и правой). Между ними размещается оператор =>. Левая часть определяет аргументы метода. В общем случае аргументы описываются в круглых скобках, для каждого аргумента указывается его тип и название. То есть фактически это круглые скобки с описанием аргументов метода. Отсутствие аргументов отображается пустыми круглыми скобками. В правой части, после оператора => описывается выделенный фигурными скобками блок, в котором размещаются команды, формирующие тело метода. Общий шаблон описания лямбда-метода такой:
(аргументы) => {
// Тело метода
}
Строго говоря, если взять описание анонимного метода, убрать ключевое слово delegate и между блоками из круглых и квадратных скобок поставить оператор =>, то получим лямбда-выражение. Оно используется точно так же, как и анонимный метод. Вместе с тем при использовании лямбда-выражений можно использовать некоторые упрощения, которые часто делают описание соответствующего метода компактным. Ниже перечислены основные правила, которые позволяют "упростить жизнь" при работе с лямбда-выражениями:
Например, ниже приведено лямбда-выражение, определяющее метод, который по символьному и целочисленному аргументу вычисляет новый символ:
(char s, int n) => { int k = s + n; return (char)k; }
Мы могли бы определить такой же метод несколько иначе:
(s, n)=>{ return (char)(s + n); }
Или еще проще:
(s, n) => (char)(s + n)
А вот пример лямбда-выражения для метода, который для заданного значения аргумента возвращает квадрат аргумента (произведение аргумента на самого себя):
n => n * n
То же самое, с помощью анонимного метода, мы могли бы описать следующим образом:
delegate(int n) { return n * n; }
То есть экономия на программном коде очевидная. Далее мы рассмотрим несколько примеров, которые иллюстрируют, как вместо анонимных методов можно было бы использовать лямбда-выражения.
Со следующего шага мы начнем рассматривать примеры использования лямбда-выражений.