跳至頁尾內容
開發者更新

C# Lambda Expressions(對於開發者的運行原理)

在C#程式設計的領域中,lambda 表達式是最強大的功能之一。 這些簡潔而富有表現力的構造使開發人員能夠編寫緊湊但強大的程式碼,提高了可讀性、可維護性和整體效率。

在這篇文章中,我們將深入探討C# lambda 表達式,探索它們的語法、使用情境、優勢,以及進階技術。 我們也將探索如何使用IronPDF 的功能Iron Software在C#應用程式中即時生成PDF文件。

理解Lambda表達式

Lambda 表達式於C# 3.0中引入,提供了一種定義匿名函式或委託的簡潔方式。 它們本質上是內嵌的匿名函式,可以在任何預期委託型別的地方使用。

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

範例:

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

在這裡,parameters是lambda 表達式的輸入參數,而expression是要執行的語句或語句區塊。 .NET通用語言執行時在編譯時為每個lambda 表達式建立匿名函式。

基本用法

讓我們來看看一個Lambda 表達式的例子,我們有一個整數列表,我們想要篩選出偶數。

我們可以使用List<t>.FindAll方法和一個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

在上述範例中,x => x % 2 == 0是一個lambda 表達式,它將整數false。lambda 主體表達式對每個列表元素執行。

使用情境

在現代應用程式開發中,使用Lambda表達式可以找到各種使用情境,包括:

  1. LINQ查詢: Lambda 表達式廣泛使用於LINQ(語言整合查詢)中,用於對資料集合執行篩選、投影、排序和分組操作。
  2. 事件處理: 在處理事件和委託時,lambda 表達式提供了一種內嵌定義事件處理器的簡潔方式。
  3. 非同步程式設計: 在像Task.Run這樣的非同步程式設計模式中,lambda 表達式可以用來定義要執行的非同步操作。
  4. 函式式程式設計: Lambda 表達式支援函式式程式設計範式,使得可以在集合上進行map、filter和reduce等操作。

Lambda 表達式的型別

表達式Lambda

帶有=>的lambda 表達式稱為表達式Lambda。 它們的格式為:

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

在上述範例中,我們正在建立一個數字的平方。 在表達式Lambda中,主體可以包含方法調用。 然而,在生成為了在.NET 通用語言執行時(CLR)之外執行的表達式樹(例如在SQL Server中)時,建議避免在Lambda表達式中使用任何方法調用。

這是因為方法在CLR環境之外可能沒有意義。 因此,在構造表達式樹時,了解目標環境、確保相容性和有意義的解讀是非常重要的。

語句Lambda

語句Lambda表達式允許多個語句,並提供更複雜的操作:

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

在這段程式碼中,宣告了一個操作在整數上並返回其平方的委託。 Lambda 主體可以包涵在區塊{}內的多個語句。

進階技術

捕捉變數

Lambda 表達式可以從封閉範圍捕捉變數。 這一特性稱為變數捕捉或閉包,使得lambda 表達式能夠存取和使用其主體外宣告的變數:

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

在此範例中,lambda 表達式factor變數。

多個參數和語句

Lambda 表達式可以有多個參數並執行包含在區塊內的多個語句:

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: Iron Software的PDF程式庫

探索 IronPDF作為一個多功能和高性能的PDF生成和解析程式庫,來自Iron Software,可用於生成PDF文件。

IronPDF 可以使用以下命令從NuGet 程式包管理器中安裝:

Install-Package IronPdf

或者如以下所示從Visual Studio中安裝:

C# Lambda Expressions (開發人員工作原理): 圖1 - 使用NuGet程式包管理器安裝IronPDF

現在,讓我們深入了解使用lambda 表達式進行PDF生成:

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

輸出

C# Lambda Expressions (開發人員工作原理): 圖2

試用授權

IronPDF 程式碼只能在從IronPDF 試用授權頁面獲得的試用授權下執行。 在彈出視窗中提供一個電子郵件地址以生成授權金鑰,並將金鑰發送到您的電子郵件。

"IronPdf.LicenseKey": "<YourKey>"

將授權金鑰放置在AppSettings.json文件中。

結論

C# lambda 表達式提供了一種定義內嵌函式的簡潔而富有表現力的方式,使程式碼更具可讀性、可維護性且更高效。 它們在包括LINQ查詢、事件處理、非同步程式設計和函式式程式設計等不同領域中找到了應用。

透過掌握lambda 表達式,開發人員可以在他們的C#程式碼庫中開啟新的生產力和優雅的維度。

無論您是經驗豐富的C#開發人員還是剛剛開始您的旅程,理解和利用lambda 表達式的力量毫無疑問會將您的程式設計技能提升到新的高度。

所以,深入研究、嘗試並擁抱lambda 表達式在您的C#專案中的美麗吧!

常見問題

我如何使用 lambda 表達式在 C# 中生成 PDF?

您可以使用 lambda 表達式來簡化程式碼,當您使用 IronPDF 程式化地生成 PDF 時。例如,您可以使用 lambda 將資料篩選後再通過 IronPDF 的方法將其渲染到 PDF 文件中。

lambda 表達式在 LINQ 查詢中的意義是什麼?

lambda 表達式在 LINQ 查詢中扮演了至關重要的角色,提供了一種簡潔的方式來定義用於篩選、排序和投影資料的函式。這增強了 LINQ 查詢在 C# 中的可讀性和效率。

lambda 表達式如何加強 C# 中的異步編程?

lambda 表達式通過允許開發者行內定義回調函式來簡化異步編程。這在事件驅動編程中特別有用,並在處理異步任務時,使程式碼更具可讀性和維護性。

lambda 表達式可以在 C# 應用程式中用於事件處理嗎?

是的,lambda 表達式常常用於事件處理,因為它們允許事件處理器的簡潔定義。這可以使程式碼更清晰且更直觀,特別是在使用像 IronPDF 這樣的庫進行文件事件處理時。

C# 中的表達式 lambda 與語句 lambda 有什麼區別?

表達式 lambda 由單一表達式組成,使用語法 x => x * x,而語句 lambda 可以在一個塊中包含多個語句,使用語法 (x) => { return x * x; }。這一區分使開發者能根據函式的複雜性進行選擇。

變數捕獲如何增強 lambda 表達式的功能?

lambda 表達式可以從其外圍作用域捕捉變數,這種功能稱為變數捕獲或閉包。這允許它們存取和使用外部變數,使 C# 中的函式定義更加動態和靈活。

有哪些使用 lambda 表達式處理多個參數的高級技術?

lambda 表達式可以通過在括號內用逗號分隔來處理多個參數。這種靈活性使得開發人員能夠行內定義複雜的函式,可在高級編程場景中利用,例如使用 IronPDF 生成複雜的 PDF 文件。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話