.NET 幫助

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

發佈 2024年6月6日
分享:

介紹

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

在本文中,我們將深入探討 C# 的 lambda 表達式,探索其語法、用途、優點和高級技術。我們還將探討如何 IronPDFIron Software 可以在 C# 應用程式中即時生成 PDF 文件。

理解Lambda表达式

Lambda表达式在C# 3.0中被引入,提供了一种简洁的方式来定义匿名函数或委托。它们本质上是内联的匿名函数,可以在预期委托类型的地方使用。

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 表達式支持函數式編程範式,能夠在集合上執行像映射、過濾和歸約這樣的操作。

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 文件。

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

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.LicenseKey": "<Your Key>"

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

結論

C# lambda 表達式提供了一種簡潔且具表現力的方式來定義內聯函數,使代碼更加可讀、可維護和高效。它們在各個領域都有應用,包括 LINQ 查詢、事件處理、異步編程和函數式編程。

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

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

所以深入探索、實驗,並擁抱 C# 項目中 lambda 表達式的美麗吧。!

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

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

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >