AI智能
改变未来

C#学习笔记-匿名方法与lambda表达式(读自C#从入门到精通 第2版)


匿名方法

要将代码块传递为委托参数,创建匿名方法则是唯一的方法。匿名方法就是为了将代码块传递为委托参数,因此也有人将其称为匿名委托。使用C#的匿名方法可以使委托及事件的代码编写更加精简、高效。一般情况下,事件注册事件处理方法,需要首先定义这个方法,如果该方法仅用于订阅特定的事件,则可使用代码更加简明的匿名方法。
示例
委托与事件中的烧水示例,Heater类不变,去掉Alarm类和Display类,使用匿名方法订阅事件修改Main方法中的代码。

Heater heater = new Heater();heater.BoilEvent += delegate (int param) //水快开时报警的匿名方法{Console.WriteLine(\"Alarm: 嘀嘀嘀,水已经{0}度了!\", param);};heater.BoilEvent += delegate (int param) // 表示水温的匿名方法{Console.WriteLine(\"Display: 水快烧开了,当前温度:{0}度!\", param);};heater.BoilWater();Console.ReadKey();/*** Alarm: 嘀嘀嘀,水已经97度了!* Display:水快烧开了,当前温度:97度。* Alarm: 嘀嘀嘀,水已经98度了!* Display:水快烧开了,当前温度:98度。* Alarm: 嘀嘀嘀,水已经99度了!* Display:水快烧开了,当前温度:99度。* Alarm: 嘀嘀嘀,水已经100度了!* Display:水快烧开了,当前温度:100度。*/

lambda表达式

lambda表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。lambda表达式对于编写LINQ查询表达式特别有用。若要创建lambda表达式,需要在lambda运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
联想理解:类似于ES6的箭头函数
示例:使用lambda表达式实现委托,进行数组排序。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Linq.Expressions;namespace LambdaTest{class Program{public delegate bool SortDelegate(int[] x); // 定义委托SortDelegatestatic void Main(string[] args){int[] arr = new int[] { 8, 9, 2, 1, 4, 3 };Console.WriteLine(\"排序前的数组:\");foreach (int i in arr) Console.Write(i); // 892143Console.WriteLine();// 用lamdba表达式实例化委托SortDelegate myDelegate = array =>{for (int i = array.GetUpperBound(0); i >= 0; i--){// 冒泡排序for (int j = 0; j <= i; j++){if (array[j] <= array[i]){int temp = array[j];array[j] = array[i];array[i] = temp;}}}return true;};myDelegate(arr);Console.WriteLine(\"排序后的数组:\");foreach(int i in arr) Console.Write(i); // 984321Console.ReadKey();}}}
  • 点赞
  • 收藏
  • 分享
  • 文章举报

Yeats.NeverGiveUp发布了12 篇原创文章 · 获赞 0 · 访问量 160私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C#学习笔记-匿名方法与lambda表达式(读自C#从入门到精通 第2版)