.NET 幫助

C# Lambda 表達式(它的運作方式對開發者來說)

發佈 2024年6月6日
分享:

介紹

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

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

理解 Lambda 表達式

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

lambda 表達式的語法是:

(parameters) => expression // lambda operator oe method syntax
x=> x*x // expression to square a number
(parameters) => expression // lambda operator oe method syntax
x=> x*x // expression to square a number
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'(parameters) => expression x=> x*x ' expression to square a number
VB   C#

在此,參數是 lambda 表達式的輸入參數,而表達式是要執行的語句或語句塊。 .NET 通用語言執行環境在編譯時為每個 lambda 表達式創建一個匿名函數。

基本用法

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

我們可以使用 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 % 3 == 0);
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evenNumbers = numbers.FindAll(x => x % 3 == 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 3 = 0)
VB   C#

在上面的例子中,x => x % 3 == 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

使用 => 的 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
VB   C#

在上述範例中,我們正在計算一個數字的平方。 在表達式 lambda 中,主體可以包含方法調用。 但是,在生成表達式樹以供 .NET 公用語言執行時環境之外的評估時(公共語言運行庫)如在 SQL Server 中,建議避免在 lambda 表達式中進行任何方法呼叫。

這是因為方法可能在 CLR 上下文之外缺乏意義。 因此,在構建表達式樹時,考慮目標環境以確保相容性和有意義的解釋是至關重要的。

語句 Lambda

以下程式碼顯示如何宣告語句 Lambda 表達式。 這裡首先宣告了一個委派,它具有僅包含參數和主體的方法。

然後,在需要的時候,將函數/方法名稱添加到委派參數中。

Func<int> mySquareDelegate = (x =>
{
    return x*x;
});
Console.WriteLine(mySquareDelegate(4));
Func<int> mySquareDelegate = (x =>
{
    return x*x;
});
Console.WriteLine(mySquareDelegate(4));
Dim mySquareDelegate As Func(Of Integer) = (Function(x)
	Return x*x
End Function)
Console.WriteLine(mySquareDelegate(4))
VB   C#

進階技術

捕捉變數

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
VB   C#

在此範例中,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;
};
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
VB   C#

IronPDF 是 Iron Software 的 PDF 程式庫

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

您可以使用以下命令從 NuGet 套件管理器安裝 IronPDF:

Install-Package IronPdf

或從 Visual Studio 安裝,如下所示:

C# Lambda 表達式(開發者如何使用):圖 1 - 使用 NuGet 套件管理器安裝 IronPDF

現在讓我們深入探討使用 lambda 表達式進行 PDF 生成。

namespace IronPatterns;
class Program
{
    static void Main()
    {
        Console.WriteLine("-----------Iron Software-------------");
        var renderer = new ChromePdfRenderer(); // var pattern
        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 };
        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);
        pdf.SaveAs("output.pdf"); // Saves PDF
    }
}
namespace IronPatterns;
class Program
{
    static void Main()
    {
        Console.WriteLine("-----------Iron Software-------------");
        var renderer = new ChromePdfRenderer(); // var pattern
        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 };
        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);
        pdf.SaveAs("output.pdf"); // Saves PDF
    }
}
Namespace IronPatterns
	Friend Class Program
		Shared Sub Main()
			Console.WriteLine("-----------Iron Software-------------")
			Dim renderer = New ChromePdfRenderer() ' var pattern
			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}
			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)
			pdf.SaveAs("output.pdf") ' Saves PDF
		End Sub
	End Class
End Namespace
VB   C#

輸出

C# Lambda 表達式(開發人員如何使用):圖 2

試用許可證

IronPDF 程式碼只能使用從獲得的試用授權執行IronPDF 試用許可證頁面. 在彈出窗口中提供電子郵件地址以生成授權密鑰,並將該密鑰發送到您的郵箱。

"IronPDF.LicenseKey": "<Your Key>"

將許可證金鑰放置在 AppSettings.Json 檔案中。

結論

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

通過掌握 lambda 表達式,開發人員可以在其 C# 程式碼庫中解鎖新的生產力和優雅層次。

無論您是一位經驗豐富的 C# 開發者,還是剛開始學習,理解並利用 lambda 表達式的強大功能,無疑會將您的編程技能提升到新的高度。

因此,深入研究、嘗試,並在您的C#專案中欣賞lambda表達式的美妙。!

< 上一頁
C# 捕獲多個異常(開發人員如何操作)
下一個 >
C# 內部關鍵字(它如何為開發人員運作)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >