Zum Fußzeileninhalt springen
.NET HILFE

C# Lambda-Ausdrücke (Funktionsweise für Entwickler)

Im Bereich der C#-Programmierung gehören Lambda-Ausdrücke zu den mächtigsten Funktionen. Diese prägnanten und ausdrucksstarken Konstrukte ermöglichen es Entwicklern, kompakten, aber robusten Code zu schreiben, der die Lesbarkeit, Wartbarkeit und Gesamteffizienz verbessert.

In diesem Artikel werden wir tief in die C#-Lambda-Ausdrücke eintauchen und ihre Syntax, Anwendungsfälle, Vorteile und fortgeschrittenen Techniken erkunden. Wir werden auch untersuchen, wie die Fähigkeiten von IronPDF von Iron Software ein PDF-Dokument spontan in C#-Anwendungen erzeugen können.

Lambda-Ausdrücke verstehen

Lambda-Ausdrücke, eingeführt in C# 3.0, bieten eine prägnante Möglichkeit, anonyme Funktionen oder Delegaten zu definieren. Sie sind im Wesentlichen Inline-anonyme Funktionen, die überall dort verwendet werden können, wo ein Delegaten-Typ erwartet wird.

Die Syntax eines Lambda-Ausdrucks lautet:

(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

Beispiel:

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

Hierbei sind parameters die Eingabeparameter des Lambda-Ausdrucks, und expression ist die Anweisung oder der Anweisungsblock, der ausgeführt werden soll. Die .NET Common Language Runtime erstellt zur Kompilierungszeit eine anonyme Funktion für jeden Lambda-Ausdruck.

Grundlagen

Sehen wir uns ein Beispiel für einen Lambda-Ausdruck an, bei dem wir eine Liste von Ganzzahlen haben und die geraden Zahlen herausfiltern wollen.

Dies können wir mit der List.FindAll-Methode in Verbindung mit einem Lambda-Ausdruck erreichen:

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

Im obigen Beispiel ist x => x % 2 == 0 ein Lambda-Ausdruck, der eine Ganzzahl x als Eingabeparameter nimmt und true zurückgibt, wenn x gerade ist, und false andernfalls. Der Lambda-Ausdruck wird auf jedes Listenelement ausgeführt.

Anwendungsfälle

Die Verwendung von Lambda-Ausdrücken in der modernen Anwendungsprogrammierung bietet eine Vielzahl von Anwendungsfällen, darunter:

  1. LINQ-Abfragen: Lambda-Ausdrücke werden umfassend in LINQ (Language Integrated Query) verwendet, um Filterungen, Projektionen, Sortierungen und Gruppierungsoperationen auf Datenkollektionen durchzuführen.
  2. Ereignisbehandlung: Beim Arbeiten mit Ereignissen und Delegaten bieten Lambda-Ausdrücke eine prägnante Möglichkeit, Ereignishandler inline zu definieren.
  3. Asynchrones Programmieren: In asynchronen Programmiermustern wie Task.Run können Lambda-Ausdrücke verwendet werden, um die auszuführende asynchrone Operation zu definieren.
  4. Funktionale Programmierung: Lambda-Ausdrücke unterstützen funktionale Programmierparadigmen und ermöglichen Operationen wie Map, Filter und Reduce auf Kollektionen.

Typen von Lambda-Ausdrücken

Ausdruck Lambdas

Lambda-Ausdrücke mit => werden Ausdrucks-Lambdas genannt. Sie haben das Format:

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

Im obigen Beispiel erstellen wir das Quadrat einer Zahl. Im Ausdrucks-Lambda können Methodenaufrufe eingeschlossen werden. Doch beim Generieren von Ausdrucksbäumen, die außerhalb der .NET Common Language Runtime (CLR) ausgewertet werden sollen, wie beispielsweise in SQL Server, ist es ratsam, auf Methodenaufrufe innerhalb von Lambda-Ausdrücken zu verzichten.

Dies liegt daran, dass Methoden außerhalb des CLR-Kontextes möglicherweise keine Bedeutung haben. Daher ist es wichtig, die Zielumgebung beim Erstellen eines Ausdrucksbaums zu berücksichtigen, um Kompatibilität und sinnvolle Interpretation sicherzustellen.

Statement Lambdas

Anweisungs-Lambda-Ausdrücke erlauben mehrere Anweisungen und bieten komplexere Operationen:

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

In diesem Code wird ein Delegat deklariert, der auf Ganzzahlen wirkt und ihr Quadrat zurückgibt. Der Lambda-Body kann mehrere Anweisungen innerhalb eines Blocks {} umfassen.

Fortgeschrittene Techniken

Variablen erfassen

Lambda-Ausdrücke können Variablen aus dem umgebenden Kontext erfassen. Diese Funktion, bekannt als Variablen-Einfangen oder Closure, ermöglicht es Lambda-Ausdrücken, Variablen zuzugreifen und zu nutzen, die außerhalb ihres Bodys deklariert sind:

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

In diesem Beispiel erfasst der Lambda-Ausdruck x => x * factor die factor-Variable aus dem umgebenden Kontext.

Mehrere Parameter und Anweisungen

Lambda-Ausdrücke können mehr als einen Parameter haben und mehrere Anweisungen ausführen, die in einem Block eingeschlossen sind:

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: Eine PDF-Bibliothek von Iron Software

Entdecken Sie IronPDF als eine vielseitige und leistungsstarke PDF-Erstellungs- und Parsing-Bibliothek von Iron Software, die zur Erstellung von PDF-Dokumenten verwendet werden kann.

IronPDF kann mit dem folgenden Befehl aus dem NuGet-Paketmanager installiert werden:

Install-Package IronPdf

Oder aus Visual Studio wie unten gezeigt installiert werden:

C#-Lambda-Ausdrücke (Wie es für Entwickler funktioniert): Abbildung 1 - Installation von IronPDF mit dem NuGet-Paketmanager

Nun tauchen wir in die PDF-Erstellung mit einem Lambda-Ausdruck ein:

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

Ausgabe

C#-Lambda-Ausdrücke (Wie es für Entwickler funktioniert): Abbildung 2

Probelizenz

Der IronPDF-Code kann nur mit einer Testlizenz ausgeführt werden, die von der IronPDF-Testlizenzseite bezogen wird. Geben Sie eine E-Mail-ID im Pop-up an, um einen Lizenzschlüssel zu generieren, und liefern Sie diesen Schlüssel an Ihre E-Mail.

"IronPDF.LicenseKey": "<YourKey>"

Platzieren Sie den Lizenzschlüssel in der Datei AppSettings.json.

Abschluss

C#-Lambda-Ausdrücke bieten eine prägnante und ausdrucksstarke Möglichkeit, Inline-Funktionen zu definieren, was den Code lesbarer, wartbarer und effizienter macht. Sie finden Anwendungen in verschiedenen Bereichen, einschließlich LINQ-Abfragen, Ereignisbehandlung, asynchronem Programmieren und funktionaler Programmierung.

Durch das Meistern von Lambda-Ausdrücken können Entwickler neue Dimensionen der Produktivität und Eleganz in ihren C#-Codebasen erschließen.

Ob Sie ein erfahrener C#-Entwickler sind oder gerade erst mit Ihrer Reise beginnen, das Verstehen und Nutzen der Leistungsfähigkeit von Lambda-Ausdrücken wird zweifellos Ihre Programmierfähigkeiten auf neue Höhen heben.

Also tauchen Sie ein, experimentieren Sie und genießen Sie die Schönheit von Lambda-Ausdrücken in Ihren C#-Projekten!

Häufig gestellte Fragen

Wie kann ich Lambda-Expressions verwenden, um PDFs in C# zu generieren?

Sie können Lambda-Expressions verwenden, um den Code zu optimieren, wenn Sie mit IronPDF arbeiten, um PDFs programmgesteuert zu generieren. Zum Beispiel können Sie mit einem Lambda Daten filtern, bevor Sie sie mit den Methoden von IronPDF in ein PDF-Dokument rendern.

Welche Bedeutung haben Lambda-Expressions in LINQ-Abfragen?

Lambda-Expressions spielen eine entscheidende Rolle in LINQ-Abfragen, indem sie eine prägnante Möglichkeit bieten, Funktionen für Operationen wie Filtern, Sortieren und Projektion von Daten zu definieren. Dies verbessert die Lesbarkeit und Effizienz von LINQ-Abfragen in C#.

Wie verbessern Lambda-Expressions das asynchrone Programmieren in C#?

Lambda-Expressions vereinfachen das asynchrone Programmieren, indem sie es Entwicklern ermöglichen, Rückruffunktionen direkt zu definieren. Dies ist besonders hilfreich in ereignisgesteuertem Programmieren und beim Umgang mit asynchronen Aufgaben, wodurch der Code lesbarer und wartbarer wird.

Können Lambda-Expressions in der Ereignisbehandlung in C#-Anwendungen genutzt werden?

Ja, Lambda-Expressions werden häufig in der Ereignisbehandlung eingesetzt, da sie eine prägnante Definition von Ereignis-Handlern ermöglichen. Dies kann den Code sauberer und intuitiver machen, insbesondere bei der Verwendung von Bibliotheken wie IronPDF für Dokumentenereignisse.

Wo liegen die Unterschiede zwischen Ausdrucks-Lambdas und Anweisungs-Lambdas in C#?

Ausdrucks-Lambdas bestehen aus einem einzelnen Ausdruck und verwenden die Syntax x => x * x, während Anweisungs-Lambdas mehrere Anweisungen innerhalb eines Blocks enthalten können, wobei die Syntax (x) => { return x * x; } verwendet wird. Diese Unterscheidung ermöglicht es Entwicklern, je nach Komplexität der Funktion zu wählen.

Wie kann das Variablen-Capturing die Funktionalität von Lambda-Expressions verbessern?

Lambda-Expressions können Variablen aus ihrem umgebenden Bereich erfassen, eine Funktion, die als Variablen-Capturing oder Schluss bezeichnet wird. Dies ermöglicht es ihnen, auf externe Variablen zuzugreifen und sie zu verwenden, was dynamischere und flexible Funktionsdefinitionen in C# ermöglicht.

Welche fortgeschrittenen Techniken gibt es für die Verwendung von Lambda-Expressions mit mehreren Parametern?

Lambda-Expressions können mehrere Parameter handhaben, indem sie diese in den Klammern mit Kommas trennen. Diese Flexibilität ermöglicht es Entwicklern, komplexe Funktionen direkt zu definieren, die in fortgeschrittenen Programmier-Szenarien genutzt werden können, wie zum Beispiel bei der Erstellung komplexer PDF-Dokumente mit IronPDF.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen