跳至頁尾內容
.NET 幫助

C# Lambda 表達式(開發者如何理解它)

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

在本文中,我們將深入探討 C# lambda 表達式,以探討其語法、用例、優點和進階技巧。 我們也將探討Iron Software的 IronPDF 功能如何在 C# 應用程式中即時產生 PDF 文件。

理解 Lambda 表達式

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

lambda表達式的語法是:

(parameters) => expression // lambda expression 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
$vbLabelText   $csharpLabel

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

基本用法

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

我們可以使用List .FindAll來實現這一點。 List .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);
$vbLabelText   $csharpLabel

在上面的範例中, x =&gt; x % 2 == 0是一個 lambda 表達式,它接受一個整數x作為輸入參數,如果x為偶數則傳回true ,否則傳回false 。該 lambda 表達式會對清單中的每個元素執行一次。

用例

在現代應用程式程式設計中,Lambda 表達式的應用場景非常廣泛,包括:

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

Lambda 表達式的類型

表達式 Lambda

=&gt; lambda 表達式稱為表達式 lambda。 他們採用以下格式:

x => x * x // expression to square a number
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
$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;
$vbLabelText   $csharpLabel

在這個例子中,lambda 表達式x =&gt; x * factor從封閉作用域中捕獲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;
};
$vbLabelText   $csharpLabel

IronPDF:Iron Software 出品的 PDF 庫

IronPDFIron Software出品的一款功能強大、效能卓越的 PDF 產生和解析庫,可用於產生 PDF 文件。

可以使用以下指令透過 NuGet 套件管理器安裝 IronPDF:

Install-Package IronPdf

或像下面這樣從 Visual Studio 安裝:

C# Lambda 表達式(開發者使用方法):圖 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
        }
    }
}
$vbLabelText   $csharpLabel

輸出

C# Lambda 表達式(開發者使用指南):圖 2

試試許可證

IronPDF 程式碼只能使用從IronPDF 試用許可證頁面取得的試用許可證來執行。 在彈出的視窗中提供電子郵件地址,即可產生許可證金鑰並將該金鑰傳送到您的電子郵件。

"IronPDF.LicenseKey": "<YourKey>"

將許可證金鑰放入AppSettings.json檔案中。

結論

C# lambda 表達式提供了一種簡潔而富有表現力的方式來定義內聯函數,使程式碼更易讀、更易於維護、更有效率。 它們在各個領域都有應用,包括 LINQ 查詢、事件處理、非同步程式設計和函數式程式設計。

透過掌握 lambda 表達式,開發人員可以在其 C# 程式碼庫中釋放出新的生產力和優雅性。

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

所以,盡情探索、嘗試,擁抱 C# 專案中 lambda 表達式的美妙之處吧!

常見問題解答

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

在使用 IronPDF 以程式設計方式產生 PDF 時,您可以使用 lambda 運算式來簡化程式碼。例如,您可以使用 lambda 表達式在透過 IronPDF 的方法將資料渲染成 PDF 文件之前對其進行過濾。

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

Lambda 表達式在 LINQ 查詢中扮演著至關重要的角色,它提供了一種簡潔的方式來定義諸如資料過濾、排序和投影等操作的函數。這提高了 C# 中 LINQ 查詢的可讀性和效率。

lambda表達式如何增強C#中的非同步程式設計?

Lambda 表達式簡化了非同步編程,讓開發者可以直接定義回呼函數。這在事件驅動程式設計和處理非同步任務時尤其有用,能夠提高程式碼的可讀性和可維護性。

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

是的,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 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。