C# 匿名函数和匿名方法的使用
简介
C# 中的匿名函数和匿名方法是指一种不需要定义函数名称的函数表达式,可以在程序运行时自定义。这种表达式可以作为参数传递给其他函数或作为一个函数返回值。
在 C# 中,匿名函数和匿名方法有两种实现方式:lambda表达式和匿名方法。接下来将分别介绍它们的使用方法。
使用lambda表达式
入门
lambda表达式使用箭头符号(=>)来分割参数和函数体,语法如下:
(parameter_list) => expression
其中,parameter_list
是一个逗号分隔的参数列表,括号可以省略当只有一个参数时。而 expression
则是要执行的语句或表达式,可以带有一个可选的 return
语句。
例如,下面的代码展示了如何使用 lambda 表达式定义一个简单的函数,并将其赋值给一个委托类型的变量:
delegate int Calculator(int x, int y);
Calculator add = (x, y) => x + y;
int result = add(3, 5);
Console.WriteLine(result); // 输出:8
示例:排序
lambda表达式常用于排序和筛选数据的场景。考虑以下示例代码:
List<int> numbers = new List<int> { 2, 16, 8, 4, 21 };
// 升序排序
numbers.Sort((a, b) => a.CompareTo(b));
// 降序排序
numbers.Sort((a, b) => b.CompareTo(a));
// 获取奇数
List<int> oddNumbers = numbers.FindAll(x => x % 2 != 0);
以上代码中,Sort 方法接受一个比较器,用于比较两个元素的大小。a.CompareTo(b)
可以为 Sort
方法提供排序规则。
FindAll
方法同样可以接受一个 lambda 表达式作为参数,用于筛选数据。
使用 lambda 表达式可以简便地定义一个比较器和筛选器,这在编写 LINQ 查询时也非常有用。
使用匿名方法
入门
匿名方法是在 C# 2.0 中引入的,它基本上与 lambda 表达式具有相同的语法和功能,只是使用 delegate
关键字来定义它们,而不是使用 =>
符号。
匿名方法需要使用 delegate
关键字来定义委托类型:
delegate int Calculator(int x, int y);
匿名方法的语法格式如下:
delegate (parameter_list) { statements }
例如,下面的代码显示了如何使用匿名方法定义计算器函数,并将其赋值给一个委托类型的变量并调用它:
Calculator add = delegate (int x, int y) { return x + y; };
int result = add(3, 5);
Console.WriteLine(result); // 输出:8
示例:筛选
下面的示例代码展示了如何使用匿名方法来筛选数据:
List<int> numbers = new List<int> { 2, 16, 8, 4, 21 };
// 过滤奇数
List<int> oddNumbers = numbers.FindAll(delegate (int x) { return x % 2 != 0; });
使用匿名方法也可以简化比较复杂的数据处理逻辑,但是在 C# 3.0 中,lambda 表达式的引入大大降低了匿名方法的使用率。
结论
在 C# 中,lambda 表达式和匿名方法都是可用的工具,它们能够使您在不定义正式方法的情况下定义函数,并且非常有用,可以用于许多不同的应用程序场景。
无论您使用哪种方法,您的选择很大程度上取决于您的编程风格和习惯。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#匿名函数和匿名方法的使用 - Python技术站