.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 表达式支持函数式编程范例,可对集合进行映射、过滤和还原等操作。

Lambda 表达式的类型

表达式语法

带有 => 的 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 上下文之外可能缺乏意义。 因此,在构建表达式树时必须考虑目标环境,以确保兼容性和有意义的解释。

语句类

下面的代码展示了如何声明语句 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 代码只能在从以下网站获得试用许可证的情况下运行IronPDF 试用许可证页面. 在弹出窗口中提供电子邮件 ID,以生成许可证密钥并将该密钥发送到您的电子邮件。

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

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

结论

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

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

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

因此,在您的 C# 项目中潜心研究、尝试和拥抱 lambda 表达式之美吧!

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

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

免费NuGet下载 总下载量: 11,781,565 查看许可证 >