.NET 帮助

C# Lambda 表达式(开发人员如何使用)

发布 2024年六月6日
分享:

简介

在 C# 编程领域,lambda 表达式是最强大的功能之一。这些简洁而富有表现力的构造使开发人员能够编写紧凑而健壮的代码,从而提高可读性、可维护性和整体效率。

在本文中,我们将深入研究 C# lambda 表达式,探索其语法、用例、优点和高级技术。我们还将探讨如何 IronPDF铁软件 可以在 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#

这里,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 % 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 表达式的类型

Expression Lambdas

带有 => 的 lambda 表达式称为表达式 lambdas。它们的格式如下:

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#

在上面的示例中,我们正在创建一个数字的平方。在表达式 lambdas 中,主体可以包括方法调用。但是,在生成用于在 .NET 公共语言运行时之外进行评估的表达式树时 (CLR)例如在 SQL Server 中,建议避免在 lambda 表达式中调用任何方法。

这是因为方法在 CLR 上下文之外可能缺乏意义。因此,在构建表达式树时必须考虑目标环境,以确保兼容性和有意义的解释。

Statement Lambdas

下面的代码展示了如何声明语句 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 从外层作用域捕获因子变量。

多个参数和语句

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 生成和解析库,由 铁软件 可用于生成 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 代码只能在从以下网站获得试用许可证的情况下运行 这里.在弹出窗口中提供一个电子邮件 ID,以生成许可证密钥并将该密钥发送到您的电子邮箱。

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

将许可证密钥放入 AppSettings.Json 文件。

结论

C# lambda 表达式为定义内联函数提供了一种简洁而富有表现力的方法,使代码更具可读性、可维护性和高效性。它们可应用于各种领域,包括 LINQ 查询、事件处理、异步编程和函数式编程。

通过掌握 lambda 表达式,开发人员可以在他们的 C# 代码库中释放出新的生产力和优雅。

无论您是经验丰富的 C# 开发人员,还是刚刚开始您的开发之旅,了解并利用 lambda 表达式的强大功能无疑会将您的编程技能提升到新的高度。

因此,请在您的 C# 项目中潜心研究、大胆尝试,尽情享受 lambda 表达式的魅力吧!

< 前一页
C# 捕获多个异常(开发人员如何使用)
下一步 >
内部关键字C#(对开发者的工作原理)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,746,704 查看许可证 >