在 C# 中,局部函数和 Lambda 表达式都可以用来定义在方法内部的小型函数。然而,它们之间存在一些关键的差异。局部函数是 C# 7.0 引入的新特性,它们可以用来创建临时委托,而且在某些情况下比 Lambda 表达式更为高效和清晰。
局部函数相较于 Lambda 表达式更适用于以下场景:
C#class Program
{
public static int AddNumbers(int a, int b)
{
// 局部函数
int AddLocal(int x, int y) => x + y;
return AddLocal(a, b); // 使用局部函数
}
public static void Main()
{
int sum = AddNumbers(3, 4);
Console.WriteLine(sum); // 输出:7
}
}
C#class Program
{
public static int Factorial(int n)
{
// 局部函数
int FactorialLocal(int number)
{
if (number <= 1)
{
return 1;
}
return number * FactorialLocal(number - 1);
}
return FactorialLocal(n); // 使用局部函数
}
public static void Main()
{
int result = Factorial(5);
Console.WriteLine(result); // 输出:120
}
}
C#public static IEnumerable<int> GetEvenNumbers(int[] numbers)
{
bool IsEven(int number) => number % 2 == 0; // 局部函数
foreach (var number in numbers)
{
if (IsEven(number)) // 使用局部函数
{
yield return number;
}
}
}
public static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5, 6 };
foreach (var even in GetEvenNumbers(numbers))
{
Console.WriteLine(even); // 输出偶数:2, 4, 6
}
}
C#public static void ProcessData(int[] data)
{
int GetMax() // 局部函数
{
int max = int.MinValue;
foreach (var number in data)
{
if (number > max)
{
max = number;
}
}
return max;
}
int GetMin() // 另一个局部函数
{
int min = int.MaxValue;
foreach (var number in data)
{
if (number < min)
{
min = number;
}
}
return min;
}
Console.WriteLine($"Max: {GetMax()}");
Console.WriteLine($"Min: {GetMin()}");
}
public static void Main()
{
int[] data = { -1, 2, 3, -4, 5, 6 };
ProcessData(data); // 输出最大值和最小值
}
局部函数是 C# 中的一项强大功能,可用于创建临时委托并在方法内部定义简单或复杂的逻辑。相比于 Lambda 表达式,局部函数提供了更好的性能和递归支持,并且可以避免闭包导致的潜在副作用。在需要定义临时委托的场景中,局部函数往往是更佳的选择。通过上述示例,我们可以看到局部函数在不同场景下的应用,它们在提高代码的可读性和性能方面起到了关键作用
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!