zoukankan      html  css  js  c++  java
  • Lambda表达式的参数捕获

    以常用的Action委托为例:

    • 有如下3个无参数的方法:
      public void Function()
      {
          //Do something
      }
      
      public void Function2()
      {
          //Do something
      }
      
      public void Function3()
      {
           //Do something
      }
    • 又有一个通用的执行函数(实现try、atch的复用):
      public  void Execute(Action action)
      {
          try
          {
              action.Invoke();
          }
          catch (Exception ex)
          {
              //Log
              Debug.WriteLine(ex);
          }
          finally
          { 
          }
      }
    • 假设这时又有一个bool Function4(int index)方法,如果我们需要用相同的方式去调用它的话,是否意味着我们要专门写一个bool Execute1()的方法来实现这一操作呢?当然不行,这样就乱套了!这时候,我们的lambda表达式就可以启用了:
      int index = 123;
      bool
      result = false; Execute(() => { result = Function4(index); });

      其实也不复杂,理解起来其实就是用Execute(Action action)调用了一个void匿名方法,在匿名方法中执行bool Function4(int index)。值得注意的是:

      1. ()=>{} 这句Lamda表达式代表了一个无参数,无返回值的委托,也就是和Action委托签名一致,Execute函数也就能调用。
      2. index和result是在Lambda表达式外部定义的变量,被Lambda表达式"捕获",在这里就作为参数传递和返回值使用。
    • 方法转自:Lamda表达式的参数捕获,太酷了,吐槽一下原文的‘外部变量’都是按引用传递的,这一点要谨记!”,这里其实只是Function4的执行结果改变了result的值而已,无需大惊小怪。
  • 相关阅读:
    将iso镜像转换为docker镜像
    Linux awk使用方法~~整理
    Linux sed使用方法
    Linux 环境变量梳理
    学习docker——命令总结
    Golang 字符串操作--使用strings、strconv包
    WebSocket实现一个聊天室
    学习WebSocket
    PHP面试题整理
    php使用gd库输出中文内容的图片
  • 原文地址:https://www.cnblogs.com/snys98/p/4259047.html
Copyright © 2011-2022 走看看