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
中,我们依次调用了GetNextNumber
和num
,输出了它们的值。
访问修饰符
本地函数可以使用和方法相同的访问修饰符:public
、private
、protected
、internal
和protected internal
。访问修饰符的作用方式和方法相同,可以限制本地函数的可访问性。
本地函数和闭包
在 C# 中,本地函数和闭包都是在方法内部定义的函数,它们都可以访问外部方法中的局部变量和参数。这两种函数有许多相似之处,但是也存在不同之处。
- 闭包中的变量在闭包返回后仍然存在,而本地函数中的变量在本地函数返回后就被销毁了。
- 本地函数是一个方法的一部分,而闭包是一个独立的表达式。闭包可以传递给其他方法或存储在变量中,而本地函数不能。
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技术站