zoukankan      html  css  js  c++  java
  • 从委托、匿名方法到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); 
    View Code

    委托

    其中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语句,则必须使用圆括号'()',如果是有多个参数也必须使用圆括号。
  • 相关阅读:
    ps | grep排除grep这个进程
    树莓派3B安装LEDE
    从路由器镜像中提取uImage头信息
    提取路由器固件中的squashfs
    javascript监听按键
    linux 英汉词典程序shell+postgresql版
    树莓派(centos7)安装mysql
    在线视频下载利器——youtube-dl
    使用curl自动签到百度贴吧
    极路由hc5661安装tcpdump
  • 原文地址:https://www.cnblogs.com/kungge/p/4787721.html
Copyright © 2011-2022 走看看