从委托、匿名方法到Lambda

前面讲过委托的知识,本次由委托过渡到Lambda表达式,更易于理解。

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             int[] intA = { 1, 3, 5, 7 };
 6             ProcArray(intA, AddOne);
 7             foreach (int i in intA)
 8             {
 9                 Console.Write(i + " ");
10             }
11
12             Console.ReadKey();
13         }
14         private static void ProcArray(int[] intArra, ProcIntArrayHandler procHandler)
15         {
16             for (int i = 0; i < intArra.Length; i++)
17             {
18                 intArra[i] = procHandler(intArra[i]);
19             }
20         }
21
22         private static int AddOne(int procNum)
23         {
24             return procNum + 1;
25         }
26         private static int AddTwo(int procNum)
27         {
28             return procNum + 2;
29         }
30     }
31     public delegate int ProcIntArrayHandler(int procNum); 

委托

其中ProcIntArrayHandler是委托类型,表示处理一个整数,并返回对该整数处理的结果。在ProcArray方法中,可用procHandler参数所引用的实例来处理数组中的每个int元素。

注:委托是引用类型,不必用new实例化。

在c#1.0中,需要委托实例化,如:ProcArray(intA, new ProcIntArrayHandler(AddTwo));该语法在c#高版本中仍支持。

匿名方法

c#2.0引入了匿名方法,使用了较简洁的语法创建委托,如:ProcArray(intA, delegate(int i) { return i + 20; });

Lambda

由以上代码可知,是将AddOne和AddTwo转换成委托类型,它们的参数类型与返回类型是和委托类型兼容,

我们注意到private static int AddOne(int procNum)的声明比方法主体return procNum + 1;冗长多了,仅仅只是为了转成委托类型。

c#3.0引入Lambda表达式,语法更简单,如:ProcArray(intA, (int i) => i + 10);

lambda语句组成:形参=>代码块。改语句包含了AddOne方法的大多数信息: 形参和代码块,方法名称和修饰符省略了。没有方法名,所以匿名方法和lambda表达式都称为匿名函数。

由于编译器能检查出参数类型和返回值,故还可以再次省略:如ProcArray(intA,i=>i+10);

注:如果是个无参数Lambda语句,则必须使用圆括号‘()‘,如果是有多个参数也必须使用圆括号。

时间: 2024-08-05 02:46:43

从委托、匿名方法到Lambda的相关文章

委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录下来,以备复习使用. 委托: 日常工作中,常常见到委托用在具体的项目中.而且委托使用起来相对来说也是非常简单的,下面列举一个委托实例用以说明如何使用委托,代码如下: class Program { public delegate int CalculateDelegate(int x, int y)

委托、匿名方法、Lambda表达式的演进

假设给我们一个泛型对象List<T>,T为int类型,要求我们使用该对象方法FindAll(Predicate<T> match)从中找出该List中的偶数,您如何实现? 说明一下:Predicate<T>是一个泛型委托,它的原型为public delegate bool Predicate<T>(T obj),该委托传入一个T类型对象,经逻辑判断后返回布尔值. 委托 可能您首先想到的是用委托实现,实现方法如下: //方法1staticvoid Method

委托,匿名方法,Lambda,泛型委托,表达式树

一.委托:完成一个委托应分三个步骤://step01:首先用delegate定义一个委托;public delegate int CalculatorAdd(int x, int y);//step02:声明一个方法来对应委托.public int Add(int x, int y){ return x + y;}protected void FrmTest_Load(object sender, EventArgs e){ //step03:用这个方法来实例化这个委托. CalculatorA

C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Reflection; using System.Linq.Expressions; namespace INPEXOne.LearnCS { class RefletLambdaDelegate { static object[] para

委托,匿名方法,Lambda表达式

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 委托 7 { 8 class Program 9 { 10 /// <summary> 11 /// 12 /// </summary> 13 /// <param name="param1"></param> 14 ///

五分钟重温C#委托,匿名方法,Lambda,泛型委托,表达式树

五分钟重温C#委托,匿名方法,Lambda,泛型委托,表达式树 https://masuit.com/81 曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五分钟内看完这篇博客 第一分钟:委托 有些教材,博客说到委托都会提到事件,虽然事件是委托的一个实例,但是为了理解起来更简单,今天只谈委托不谈事件.先上一段代码: 下边的代码,完成了一个委托应用的演示.一个委托分三个步骤: 1 2 3 4 5 6 7 8 9 10 11 12

C#Lambda表达式的理解:谓词方法 匿名方法 使用Lambda

Lambda表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量.它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式.所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to".Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块. 下面三个方法会帮你会容易理解到Lambda表达式的好处,

Fun&lt;&gt;,匿名方法,Lambda表达式 冒泡排序C#

大头文 分享,进步 冒泡排序C#实现,使用委托,包括三种方式:Fun<>,匿名方法,Lambda表达式 冒泡排序是一种简单的排序方法,适合于小量数字排序,对于大量数字(超过10个),还有更高效的排序方法.这里的实现的冒泡排序,需实现功能:不仅数字排序,还要对任意对象排序 示例: 对People对象的Age(年龄)排序 对Student对象的Score(分数)排序 People: public class People { public string Name { get; set; } pub

匿名方法,Lambda表达式,高阶函数

原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销. 常用于将委托和匿名方法关联,例如 1. 使用委托和方法关联: this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);private void btnRefresh_Click(object sender, EventArgs e){    BindData();} 2. 使用委

从匿名方法到 Lambda 表达式的推演过程

Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式的描述.实质上Lambda 表达式可以说是从匿名方法推演而来,微软程序员为了提高我们广大程序员的生产效率推出了Lambda 表达式,它的出现无疑是极具影响力的. Lambda 表达式使用Lambda 运算符=>,我们一般读作“goes to”,当然这并不是说它跟C#中的goto有相同的含义,只是都有