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

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# SendMail发送邮件实例代码

    下面详细讲解一下“c# SendMail发送邮件实例代码”的完整攻略。 什么是SendMail? SendMail是c#中一个邮件发送类,可以方便地实现发送邮件的功能。它的使用方法较为简单,只需要按照一定格式配置SMTP服务器和发件人信息,即可完成邮件的发送。 SendMail使用教程 配置SMTP服务器 在使用SendMail发送邮件前,需要首先配置SMT…

    C# 2023年6月7日
    00
  • c#使用linq把多列的List转化为只有指定列的List

    想要使用LINQ将多列的列表转化为只有指定列的列表,可以按照以下步骤进行操作: 首先创建一个包含多列数据的列表,可以使用下面的代码创建一个实例用于演示: List<Person> persons = new List<Person>() { new Person() { Id = 1, Name = "Tom", …

    C# 2023年6月1日
    00
  • C#中List〈string〉和string[]数组之间的相互转换

    在C#中,List和string[]数组是常用的数据类型。有时候我们需要将它们相互转换,以便在不同的场景中使用。本文将详细讲解C#中List和string[]数组之间的相互转换的完整攻略,包括两个示例。 List转换为string[]数组 要将List转换为string[]数组,可以使用List的ToArray()方法。该方法将返回一个包含List中所有元素…

    C# 2023年5月15日
    00
  • C#精髓 GridView72大绝技 学习gridview的朋友必看

    C#精髓GridView72大绝技学习攻略 什么是GridView? GridView是ASP.NET Web应用程序开发中的常见控件之一,它可以在Web页面上呈现出类似于表格的数据。GridView可以用于展示各种数据,例如:数据列表、报表等。 学习GridView的准备工作 学习GridView需要具备以下技能: C#基础语法 ASP.NET Web开发…

    C# 2023年5月15日
    00
  • ASP.NET Core中间件会话状态读写及生命周期示例

    ASP.NET Core中间件会话状态读写及生命周期示例 在ASP.NET Core应用程序中,会话状态是一种在多个请求之间保持数据的机制。在本攻略中,我们将详细讲解如何在ASP.NET Core中间件中读写会话状态,并介绍会话状态的生命周期。 步骤一:启用会话状态 在ASP.NET Core应用程序中启用会话状态,您需要在Startup.cs文件中调用Ad…

    C# 2023年5月17日
    00
  • C#如何判断.Net Framework版本是否满足软件运行需要的版本

    可以使用以下步骤来判断.Net Framework版本是否满足软件运行的需要的版本: 步骤一:引入System.Runtime.Versioning命名空间 判断.Net Framework 版本需要使用System.Runtime.Versioning命名空间中的FrameworkName类。首先需要在程序中引用此命名空间: using System.Ru…

    C# 2023年6月3日
    00
  • ASP.NET Core MVC 从入门到精通之Razor语法

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启…

    C# 2023年4月24日
    00
  • C# 创建报表过程详解

    标题:C# 创建报表过程详解 1. 介绍 在C#中,我们可以使用ReportViewer控件来创建报表。ReportViewer控件是Visual Studio自带的,使用它可以在Web和Winform应用程序中显示报表。本文将介绍如何使用ReportViewer控件创建报表。 2. 步骤 2.1 安装ReportViewer控件 在Visual Studi…

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