Ir para o conteúdo do rodapé
AJUDA DO .NET

Expressões Lambda em C# (Como Funciona para Desenvolvedores)

No universo da programação em C#, as expressões lambda se destacam como um dos recursos mais poderosos. Essas construções concisas e expressivas permitem que os desenvolvedores escrevam código compacto, porém robusto, aprimorando a legibilidade, a facilidade de manutenção e a eficiência geral.

Neste artigo, vamos explorar em detalhes as expressões lambda em C#, analisando sua sintaxe, casos de uso, benefícios e técnicas avançadas. Também exploraremos como os recursos do IronPDF, da Iron Software, podem gerar um documento PDF dinamicamente em aplicativos C#.

Entendendo as expressões lambda

As expressões lambda, introduzidas no C# 3.0, fornecem uma maneira concisa de definir funções anônimas ou delegados. Essencialmente, são funções anônimas embutidas que podem ser usadas sempre que um tipo delegado for esperado.

A sintaxe para uma expressão lambda é:

(parameters) => expression // lambda expression syntax
(parameters) => expression // lambda expression syntax
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'(parameters) => expression ' lambda expression syntax
$vbLabelText   $csharpLabel

Exemplo:

x => x * x // lambda expression to square a number
x => x * x // lambda expression to square a number
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'x => x * x ' lambda expression to square a number
$vbLabelText   $csharpLabel

Aqui, parameters são os parâmetros de entrada da expressão lambda e expression é a instrução ou bloco de instruções a ser executado. O ambiente de execução de linguagem comum do .NET cria uma função anônima para cada expressão lambda durante o tempo de compilação.

Uso básico

Vejamos um exemplo de expressão Lambda onde temos uma lista de números inteiros e queremos filtrar os números pares.

Podemos conseguir isso usando o método List<t>.FindAll juntamente com uma expressão lambda:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evenNumbers = numbers.FindAll(x => x % 2 == 0);
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evenNumbers = numbers.FindAll(x => x % 2 == 0);
Dim numbers As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim evenNumbers As List(Of Integer) = numbers.FindAll(Function(x) x Mod 2 = 0)
$vbLabelText   $csharpLabel

No exemplo acima, x => x % 2 == 0 é uma expressão lambda que recebe um inteiro x como parâmetro de entrada e retorna true se x for par, e false caso contrário. O corpo da expressão lambda é executado em cada elemento da lista.

Casos de uso

O uso de expressões Lambda na programação de aplicações modernas encontra uma variedade de aplicações, incluindo:

  1. Consultas LINQ: Expressões lambda são amplamente utilizadas em LINQ (Language Integrated Query) para realizar operações de filtragem, projeção, classificação e agrupamento em coleções de dados.
  2. Tratamento de eventos: Ao trabalhar com eventos e delegados, as expressões lambda fornecem uma maneira concisa de definir manipuladores de eventos diretamente no código.
  3. Programação Assíncrona: Em padrões de programação assíncrona como Task.Run, expressões lambda podem ser usadas para definir a operação assíncrona a ser executada.
  4. Programação Funcional: As expressões lambda suportam paradigmas de programação funcional, permitindo operações como map, filter e reduce em coleções.

Tipos de expressões Lambda

Lambdas de expressão

Expressões lambda com => são chamadas de lambdas de expressão. Eles seguem o seguinte formato:

x => x * x // expression to square a number
x => x * x // expression to square a number
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'x => x * x ' expression to square a number
$vbLabelText   $csharpLabel

No exemplo acima, estamos criando o quadrado de um número. Em expressões lambda, o corpo pode incluir chamadas de método. No entanto, ao gerar árvores de expressão destinadas à avaliação fora do Common Language Runtime (CLR) do .NET , como no SQL Server, é aconselhável evitar qualquer chamada de método dentro de expressões lambda.

Isso ocorre porque os métodos podem não ter significado fora do contexto do CLR. Portanto, é crucial considerar o ambiente de destino ao construir uma árvore de expressão para garantir compatibilidade e interpretação significativa.

Lambdas de declaração

As expressões lambda permitem múltiplas instruções e fornecem operações mais complexas:

Func<int, int> mySquareDelegate = (x) =>
{
    return x * x;
};

Console.WriteLine(mySquareDelegate(4)); // Output: 16
Func<int, int> mySquareDelegate = (x) =>
{
    return x * x;
};

Console.WriteLine(mySquareDelegate(4)); // Output: 16
Dim mySquareDelegate As Func(Of Integer, Integer) = Function(x)
	Return x * x
End Function

Console.WriteLine(mySquareDelegate(4)) ' Output: 16
$vbLabelText   $csharpLabel

Neste código, é declarado um delegado que opera sobre números inteiros e retorna o seu quadrado. O corpo lambda pode abranger várias instruções dentro de um bloco {}.

Técnicas Avançadas

Capturando variáveis

Expressões lambda podem capturar variáveis ​​do escopo envolvente. Essa funcionalidade, conhecida como captura de variáveis ​​ou fechamento (closure), permite que expressões lambda acessem e usem variáveis ​​declaradas fora de seu corpo:

int factor = 2;
Func<int, int> multiplier = x => x * factor;
int factor = 2;
Func<int, int> multiplier = x => x * factor;
Dim factor As Integer = 2
Dim multiplier As Func(Of Integer, Integer) = Function(x) x * factor
$vbLabelText   $csharpLabel

Neste exemplo, a expressão lambda x => x * factor captura a variável factor do escopo envolvente.

Múltiplos parâmetros e instruções

Expressões lambda podem ter mais de um parâmetro e executar múltiplas instruções contidas em um bloco:

Func<int, int, int> add = (a, b) =>
{
    int result = a + b;
    Console.WriteLine($"The sum of {a} and {b} is {result}");
    return result;
};
Func<int, int, int> add = (a, b) =>
{
    int result = a + b;
    Console.WriteLine($"The sum of {a} and {b} is {result}");
    return result;
};
Dim add As Func(Of Integer, Integer, Integer) = Function(a, b)
	Dim result As Integer = a + b
	Console.WriteLine($"The sum of {a} and {b} is {result}")
	Return result
End Function
$vbLabelText   $csharpLabel

IronPDF: Uma biblioteca de PDF da Iron Software

Explore o IronPDF , uma biblioteca versátil e de alto desempenho da Iron Software para geração e análise de PDFs, que pode ser usada para gerar documentos PDF.

O IronPDF pode ser instalado a partir do gerenciador de pacotes NuGet com o seguinte comando:

Install-Package IronPdf

Ou instalado a partir do Visual Studio, conforme mostrado abaixo:

Expressões Lambda em C# (Como funciona para desenvolvedores): Figura 1 - Instalando o IronPDF com o gerenciador de pacotes NuGet

Agora vamos explorar a geração de PDFs usando uma expressão lambda:

using IronPdf; // Import the IronPdf library
using System;
using System.Collections.Generic;
using System.Linq;

namespace IronPatterns
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("-----------Iron Software-------------");
            var renderer = new ChromePdfRenderer(); // Initialize the PDF renderer
            var content = "<h1> Iron Software is Awesome </h1> Made with IronPDF!";
            content += "<h2>Demo C# lambda expressions</h2>";
            content += $"<p>Generating Square of list of numbers x=>x*x</p>";

            List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            // Use Select to create a list of squared numbers
            List<int> squares = numbers.Select(x => x * x).ToList();

            content += $"<p>Numbers list: {string.Join(",", numbers)}</p>";
            content += $"<p>Squares: {string.Join(",", squares)}</p>";

            var pdf = renderer.RenderHtmlAsPdf(content); // Render the HTML as a PDF
            pdf.SaveAs("output.pdf"); // Save the PDF document
        }
    }
}
using IronPdf; // Import the IronPdf library
using System;
using System.Collections.Generic;
using System.Linq;

namespace IronPatterns
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("-----------Iron Software-------------");
            var renderer = new ChromePdfRenderer(); // Initialize the PDF renderer
            var content = "<h1> Iron Software is Awesome </h1> Made with IronPDF!";
            content += "<h2>Demo C# lambda expressions</h2>";
            content += $"<p>Generating Square of list of numbers x=>x*x</p>";

            List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            // Use Select to create a list of squared numbers
            List<int> squares = numbers.Select(x => x * x).ToList();

            content += $"<p>Numbers list: {string.Join(",", numbers)}</p>";
            content += $"<p>Squares: {string.Join(",", squares)}</p>";

            var pdf = renderer.RenderHtmlAsPdf(content); // Render the HTML as a PDF
            pdf.SaveAs("output.pdf"); // Save the PDF document
        }
    }
}
Imports IronPdf ' Import the IronPdf library
Imports System
Imports System.Collections.Generic
Imports System.Linq

Namespace IronPatterns
	Friend Class Program
		Shared Sub Main()
			Console.WriteLine("-----------Iron Software-------------")
			Dim renderer = New ChromePdfRenderer() ' Initialize the PDF renderer
			Dim content = "<h1> Iron Software is Awesome </h1> Made with IronPDF!"
			content &= "<h2>Demo C# lambda expressions</h2>"
			content &= $"<p>Generating Square of list of numbers x=>x*x</p>"

			Dim numbers As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
			' Use Select to create a list of squared numbers
			Dim squares As List(Of Integer) = numbers.Select(Function(x) x * x).ToList()

			content &= $"<p>Numbers list: {String.Join(",", numbers)}</p>"
			content &= $"<p>Squares: {String.Join(",", squares)}</p>"

			Dim pdf = renderer.RenderHtmlAsPdf(content) ' Render the HTML as a PDF
			pdf.SaveAs("output.pdf") ' Save the PDF document
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

Saída

Expressões Lambda em C# (Como funciona para desenvolvedores): Figura 2

Licença de teste

O código IronPDF só pode ser executado com uma licença de avaliação obtida na página de licenças de avaliação do IronPDF . Forneça um endereço de e-mail na janela pop-up para gerar uma chave de licença e recebê-la em seu e-mail.

"IronPdf.LicenseKey": "<YourKey>"

Insira a chave de licença no arquivo AppSettings.json.

Conclusão

As expressões lambda em C# oferecem uma maneira concisa e expressiva de definir funções embutidas, tornando o código mais legível, fácil de manter e eficiente. Elas encontram aplicações em diversos domínios, incluindo consultas LINQ, tratamento de eventos, programação assíncrona e programação funcional.

Ao dominar as expressões lambda, os desenvolvedores podem desbloquear novas dimensões de produtividade e elegância em seus códigos C#.

Seja você um desenvolvedor C# experiente ou esteja apenas começando sua jornada, entender e aproveitar o poder das expressões lambda certamente elevará suas habilidades de programação a um novo patamar.

Então, mergulhe de cabeça, experimente e abrace a beleza das expressões lambda em seus projetos C#!

Perguntas frequentes

Como posso usar expressões lambda para gerar PDFs em C#?

Você pode usar expressões lambda para agilizar o código ao trabalhar com o IronPDF para gerar PDFs programaticamente. Por exemplo, você pode usar uma expressão lambda para filtrar dados antes de renderizá-los em um documento PDF usando os métodos do IronPDF.

Qual a importância das expressões lambda em consultas LINQ?

As expressões lambda desempenham um papel crucial nas consultas LINQ, fornecendo uma maneira concisa de definir funções para operações como filtragem, classificação e projeção de dados. Isso aprimora a legibilidade e a eficiência das consultas LINQ em C#.

Como as expressões lambda aprimoram a programação assíncrona em C#?

As expressões lambda simplificam a programação assíncrona, permitindo que os desenvolvedores definam funções de retorno de chamada diretamente no código. Isso é particularmente útil na programação orientada a eventos e no tratamento de tarefas assíncronas, tornando o código mais legível e fácil de manter.

É possível utilizar expressões lambda no tratamento de eventos em aplicações C#?

Sim, expressões lambda são comumente usadas no tratamento de eventos, pois permitem a definição concisa de manipuladores de eventos. Isso pode tornar o código mais limpo e intuitivo, especialmente ao usar bibliotecas como o IronPDF para eventos de documentos.

Quais são as diferenças entre lambdas de expressão e lambdas de instrução em C#?

As lambdas de expressão consistem em uma única expressão e usam a sintaxe x => x * x , enquanto as lambdas de instrução podem conter várias instruções dentro de um bloco, usando a sintaxe ` (x) => { return x * x; } . Essa distinção permite que os desenvolvedores escolham com base na complexidade da função.

Como a captura de variáveis pode aprimorar a funcionalidade das expressões lambda?

Expressões lambda podem capturar variáveis de seu escopo envolvente, um recurso conhecido como captura de variáveis ou closure. Isso permite que elas acessem e usem variáveis externas, possibilitando definições de funções mais dinâmicas e flexíveis em C#.

Quais são algumas técnicas avançadas para usar expressões lambda com múltiplos parâmetros?

Expressões lambda podem lidar com múltiplos parâmetros, separando-os por vírgulas dentro dos parênteses. Essa flexibilidade permite que os desenvolvedores definam funções complexas diretamente no código, o que pode ser aproveitado em cenários de programação avançados, como a geração de documentos PDF complexos com o IronPDF.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim