在C#中,匿名方法和Lambda表达式是两种用于创建简洁、内联的函数的技术。它们提供了一种方便的方式来定义和传递函数作为参数
// 使用匿名方法作为委托参数
void ProcessData(int number, Action<int> action)
{
action(number);
}
// 使用匿名方法调用
ProcessData(5, delegate(int n)
{
Console.WriteLine("Number: " + n);
});
在以上示例中,匿名方法被赋值给 Action<int> 委托类型的参数,并在调用 ProcessData 方法时传递了一个匿名方法作为参数。匿名方法内联定义了一个只接受整数参数并输出到控制台的操作。
// 使用Lambda表达式作为委托参数
void ProcessData(int number, Action<int> action)
{
action(number);
}
// 使用Lambda表达式调用
ProcessData(5, n =>
{
Console.WriteLine("Number: " + n);
});
在以上示例中,Lambda表达式 n => { Console.WriteLine("Number: " + n); } 被传递给 Action<int> 委托类型的参数,并作为参数传递给 ProcessData 方法。Lambda表达式内联定义了一个只接受整数参数并输出到控制台的操作。 Lambda表达式还支持更多的语法构造,例如多个参数、表达式体、条件运算符等。以下是一些示例代码:
// Lambda表达式示例
// Lambda表达式赋值给委托变量
Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // 输出: 25
// Lambda表达式作为LINQ查询条件
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
foreach (var number in evenNumbers)
{
Console.WriteLine(number); // 输出: 2, 4
}
// Lambda表达式作为任务的执行体
Task.Run(() => Console.WriteLine("Hello, World!"));
// Lambda表达式作为事件处理方法
button.Click += (sender, e) => Console.WriteLine("Button clicked");
以上示例展示了Lambda表达式在不同场景下的应用。Lambda表达式的简洁语法和灵活性使得代码更加清晰、易读和易于编写。通过合理运用匿名方法和Lambda表达式,可以提高代码的可读性和可维护性,并简化函数式编程的实现。