Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender Expressão lambda
  2. Ver exemplos de Uso
  3. Expressão lambda e escopo
  4. Lambda como atributo de classe

Em C#, expressões lambda são utilizadas para declarar funções anônimas que podem e declarações ou uma expressão como retorno em seu corpo.

Expressões lambda possui as formas abaixo e utilizam o operador (=>) para identificar sua declaração:

Sintaxe
() => { declaracoes } 
(lista_parametros) => expressao_retorno;
(lista_parametros) => { declaracoes }

O uso de () para delimitar os parâmetros de uma expressão lambda é opcional. O uso de {} pode ser omitido caso seu corpo contenha apenas uma expressão aritmética ou lógica, por exemplo, como retorno.

Lambda pode ser usadas em conjunto com Func, Action e Predicate. Essas assuntos serão vistos em mais adiante.

Sintaxe
Action<T> nome_action = (T parametro) => expressao; 
Func<T> nome_func  = (T parametro) => expressao;
Onde
T: Tipo de dado do parâmetro 
expressao: Expressão de retorno

Para invocarmos uma expressão lambda, utilizamos seu nome no e seus repectivos argumentos passados:

Sintaxe
nome_action(lista_argumentos);
tipo_retorno nome_variavel = nome_action(lista_argumentos);

No exemplo 1 abaixo, uma expressão Lambda foi declarada utilizando Func. Um expressão aritmética de soma foi declarada como retorno.

Exemplo 1
using System;

public class Program
{
	public static void Main()
	{
        //<int, int, int> - parâmetro, parâmetro, retorno
		Func<int,int,int> soma = (x,y) => (x + y); 
        int ret = soma(10,10);
		Console.WriteLine();
	}
}
Saída
20
110

As sintaxes acima são apenas ilustrativas para o uso de Action e Func com apenas um parâmetro.

Quando declaramos uma expressão Lambda, o bloco de código ou expressão contido em seu corpo pode acessar variáveis declaradas em um escopo acima, por exemplo:

No exemplo 2 abaixo, uma expressão Lambda foi declarada utilizando Func. Um expressão aritmética de soma foi declarada como retorno. Essa expressão acessa uma variável declarada na main.

Exemplo 2
using System;

public class Program
{
	public static void Main()
	{
    	int y = 100;
		Func<int,int> soma2 = (x) => (x + y);  //y está escopo externo
		Console.WriteLine(soma(10));
	}
}
Saída
110

Abaixo, estão listados alguns exemplos de como e onde utilizar o recurso de expressão lambda. Os exemplos são simples para melhor compreensão do assunto. Outros exemplos serão vistos quando os assuntos Delegate, Func, Action e Predicate forem estudos.

Exemplo 3: Lambda + Condição
using System;

public class Program
{
	public static void Main()
	{
		Func<int,bool> ehPar = (x) => x%2 == 0; //filta números pares
		Console.WriteLine(ehPar(10));
	}
}
Saída
True
Exemplo 3: Lambda + Linq
using System;
using System.Linq;

public class Program
{
	public static void Main()
	{
        int[] vetor = { 0, 1, 2 , 3, 4};
        int pares = vetor.Count(x => x%2 == 0); //método de extensão Count
        Console.WriteLine(pares);
	}
}
Saída
3
Exemplo 3: Lambda + Atributo de classe
using System;
public class Teste
{
  private int campo1 =-1;

  //Popriedade utilizando lambda
  public int Campo1 
  { 
    get => campo1;
    set => campo1 = value;
  }
}
public class Program
{
	public static void Main()
	{
      Teste teste = new Teste(); 
      teste.Campo1 = -2;
      Console.WriteLine(teste.Campo1);
	}
}
Saída
-2
Exemplo 4: Lambda como parâmetro/argumento
using System;

public class Program
{
    public static void Print(Action<int> lambda, int param)
    {
        lambda(param);
    }
    
	public static void Main()
	{
        Action<int> teste = x => Console.WriteLine(x); //expressão lambda
        Print(teste,888); //lambda passada como argumento
	}
}
Saída
888
  1. 11/10/2024 - revisão 1 - Adição: tópico 'Escopo', sintaxe de uso em 'Expressão'; Correções e ajustes pontuais
  2. 21/03/2024 - versão inicial