C# 本地函数与 Lambda 表达式详细介绍

yizhihongxing

C# 本地函数与 Lambda 表达式详细介绍

在 C# 7.0 中,本地函数(Local Function)成为了新语法糖。本地函数是一种嵌套在方法(函数)中的函数,本地函数通常需要访问外部方法中的局部变量或参数,本地函数也需要遵守访问修饰符的限制。Lambda 表达式是 C# 语言中的另一种语法糖,用于创建可传递的匿名函数。

本地函数

本地函数是一种新语法糖,可以让我们在方法内部定义一个函数。在许多情况下,您可能希望在方法内部声明一个函数来执行一个简单的任务,而不是分离出一个单独的方法来处理这个任务。使用本地函数可以使代码更加清晰。

定义本地函数

定义本地函数时,需要使用关键字local function。下面是一个完整的本地函数示例:

public void PrintNumber(int num)
{
    int GetNextNumber()
    {
        return ++num;
    }

    Console.WriteLine(GetNextNumber()); // 输出11
    Console.WriteLine(num); // 输出10
}

在上面的例子中,我们定义了一个本地函数GetNextNumber,该函数返回参数num的下一个数。本地函数GetNextNumber可以访问外部方法PrintNumber传递的参数num,并能够在本地函数范围内使用。在PrintNumber中,我们依次调用了GetNextNumbernum,输出了它们的值。

访问修饰符

本地函数可以使用和方法相同的访问修饰符:publicprivateprotectedinternalprotected internal。访问修饰符的作用方式和方法相同,可以限制本地函数的可访问性。

本地函数和闭包

在 C# 中,本地函数和闭包都是在方法内部定义的函数,它们都可以访问外部方法中的局部变量和参数。这两种函数有许多相似之处,但是也存在不同之处。

  1. 闭包中的变量在闭包返回后仍然存在,而本地函数中的变量在本地函数返回后就被销毁了。
  2. 本地函数是一个方法的一部分,而闭包是一个独立的表达式。闭包可以传递给其他方法或存储在变量中,而本地函数不能。

Lambda 表达式

Lambda 表达式是 C# 语言中的另一种语法糖,用于创建可传递的匿名函数。Lambda 表达式的使用可以简化代码并提高可读性。

定义 Lambda 表达式

Lambda 表达式定义方式如下:

(parameter_list) => expression

其中,parameter_list指定参数列表,多个参数之间使用逗号分隔,expression表示表达式或语句块。

例如,在下面的示例中,我们使用 Lambda 表达式求和:

Func<int, int, int> Sum = (a, b) => a + b;
Console.WriteLine(Sum(1, 1)); // 输出2

在上面的代码中,我们定义了一个 Func 类型的变量Sum,该类型表示一个带有两个 int 类型参数并返回 int 类型的委托。我们使用 Lambda 表达式重新定义Sum变量,并将其设置为返回两个参数的和。在输出Sum(1, 1)的结果时,会输出 2。

可以省略参数列表和括号

当 Lambda 表达式的参数列表为空时,可以省略参数列表和括号。示例如下:

Func<int> getRandomNumber = () =>
{
    return new Random().Next(1, 100);
};
Console.WriteLine(getRandomNumber()); // 输出一个1到100的随机数

在上面的示例代码中,我们创建了一个getRandomNumber变量,该变量是一个不带参数而返回 int 类型的 Lambda 表达式。在 Lambda 表达式中,我们使用 New() 方法生成一个随机数,并返回这个随机数。

可以省略表达式

当 Lambda 表达式由单个语句组成时,可以省略括号并省略大括号中的语句。示例如下:

Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // 输出25

在上面的示例代码中,我们创建了一个square变量,该变量是一个带有 int 类型参数并返回 int 类型的 Lambda 表达式。在 Lambda 表达式中,我们使用一个表达式 u * u,将输入的参数平方后返回。为了使代码更加简洁,我们省略了花括号。

以上就是 C# 本地函数和 Lambda 表达式的详细介绍,希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 本地函数与 Lambda 表达式详细介绍 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C# MeasureString测量字符串函数的使用方法

    下面是详细讲解 “C# MeasureString 测量字符串函数的使用方法”的攻略。 什么是 MeasureString 函数 MeasureString 函数是 C# 中 System.Drawing.Graphics 类中的一个方法,用于测量字符串的尺寸大小。它的方法声明如下: public SizeF MeasureString(string tex…

    C# 2023年6月7日
    00
  • C#获取文件夹所占空间大小的功能

    要实现该功能,可以使用C#内置的System.IO命名空间下的DirectoryInfo类和FileInfo类。下面是详细的步骤: 使用DirectoryInfo类创建文件夹的实例。 DirectoryInfor dirInfo = new DirectoryInfo(@"C:\Users\Administrator\Desktop\Example…

    C# 2023年6月1日
    00
  • C#泛型的使用及示例详解

    C#泛型的使用及示例详解 什么是泛型 泛型是C#中的一个重要特性,它将类型参数化,从而实现了代码的复用性和类型安全。 将值类型和引用类型参数化,使得在编写代码时可以将类型作为参数来传递,从而使代码更加通用化和可扩展。而且,由于泛型是在编译时进行类型检查的,所以可以避免一些类型转换的错误。 泛型的语法 泛型的语法格式是: class Name<T>…

    C# 2023年5月14日
    00
  • c#字符串编码编码(encoding)使用方法示例

    c#字符串编码编码(encoding)使用方法示例 在C#中,字符串编码(encoding)是将文字转换成二进制数据(byte数组),输出或读取到文件或设备中的方式。本文将介绍C#中字符串编码的使用方法及示例说明。 1. 编码与解码 编码指将字符串转换成二进制数据,而解码则是将二进制数据转换成字符串。在C#中,编码和解码都是通过Encoding类实现的。 以…

    C# 2023年6月1日
    00
  • .net如何优雅的使用EFCore实例详解

    以下是关于“.NET如何优雅地使用EFCore实例详解”的完整攻略: 1. 什么是EFCore? EFCore是.NET平台上的一个ORM(对象关系映射)框架,它可以将数据库中的数据映射到.NET对象中,使得开发人员可以使用.NET对象来操作数据库,而不必直接操作数据库。 2. 如何使用EFCore? 在.NET中,可以使用EFCore来操作数据库。可以按照…

    C# 2023年5月12日
    00
  • 初学C#所需明白的那些点

    当你初学 C# 时,需要了解以下几点: 安装C#开发环境 在开始 C# 编程之前,你需要安装 .NET Framework 和 Visual Studio。.NET Framework 提供各种编程语言的软件基础设施,同时和 Windows 操作系统绑定,运行 .NET 程序必须安装该框架。而 Visual Studio 是 Microsoft 开发的一款 …

    C# 2023年6月7日
    00
  • C#操作注册表的方法

    下面是关于C#操作注册表的方法的完整攻略。 什么是注册表 注册表是Windows操作系统中一个存储配置信息的关键数据结构。在注册表中,包含了大量的系统和软件的配置信息,比如安装路径、环境变量、文件类型、驱动程序等等。Windows系统和软件的运行状态也将会写入注册表。 在C#中,我们可以通过Registry类来访问和操作注册表。 C#操作注册表的方法 读取注…

    C# 2023年5月15日
    00
  • C# 使用modbus 读取PLC 寄存器地址的方法

    C#是一种强类型编程语言,用于开发.NET框架下的应用程序。 Modbus是一种在工业自动化领域广泛使用的通讯协议,用于在PLC和其他设备之间进行通信。在本篇文章中,我们将详细讲解C#使用Modbus读取PLC寄存器地址的方法。 准备工作 在开始之前,必须做以下准备工作: 安装.Net框架; 准备好一个Modbus通讯的PLC设备; 下载和安装一个支持Mod…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部