跳過到頁腳內容
.NET幫助

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

在 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<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);
$vbLabelText   $csharpLabel

在上面的範例中,x => x % 2 == 0 是一個 lambda 表達式,它接受一個整數 x 作為輸入參數,如果 x 為偶數,則傳回 x 為偶數,則傳回 `trueCODE-945-- lambda 表達式的主體部分會對列表中的每個元素執行。

用例

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

  1. LINQ 查詢: Lambda 運算式在 LINQ(語言整合查詢)中被廣泛使用,用於對資料集合執行篩選、投影、排序和分組運算。 2.事件處理:在使用事件和委託時,lambda 表達式提供了一種簡潔的方式來內嵌定義事件處理程序。 3.非同步程式設計:在非同步程式設計模式中,可以使用 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
$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 => 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 表達式的美妙之處吧!

常見問題解答

我如何使用 Lambda 表達式生成 C# 中的 PDF?

當使用 IronPDF 以程式化方式生成 PDF 時,您可以使用 Lambda 表達式來簡化代碼。例如,您可以使用 Lambda 來在使用 IronPDF 方法將數據渲染到 PDF 文檔之前對其進行過濾。

Lambda 表達式在 LINQ 查詢中的重要性是什麼?

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核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me