对于Action的使用方法使用如下:

  1. namespace ConsoleApp1
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. string first = "First";
  8. var action = new Action(() => { Console.WriteLine(first); });
  9. action();
  10.  
  11. var action2 = new Action<string>((s) => { Console.WriteLine($"Action<T>:{s}"); });
  12. action2(first);
  13.  
  14. var action3 = new Action<string, string>((s1, s2) => {
  15. Console.WriteLine($"Action<T1,T2>:{s1},{s2}");
  16. });
  17. action3(first, "second");
  18. }
  19. }
  20. }

使用dotPeek通过反编译,得到代码:

  1. namespace ConsoleApp1
  2. {
  3. internal class Program
  4. {
  5. private static void Main(string[] args)
  6. {
  7. string first = "First";
  8. ((Action) (() => Console.WriteLine(first)))();
  9. ((Action<string>) (s => Console.WriteLine(string.Format("Action<T>:{0}", (object) s))))(first);
  10. ((Action<string, string>) ((s1, s2) => Console.WriteLine(string.Format("Action<T1,T2>:{0},{1}", (object) s1, (object) s2))))(first, "second");
  11. }
  12. }
  13. }

下面写一种与反编译出来的相似的方法

  1. namespace ConsoleApp1
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. string first = "First";
  8. var action = new Action(() => { Console.WriteLine(first); });
  9. action();
  10.  
  11. var action2 = new Action<string>((s) => { Console.WriteLine($"Action<T>:{s}"); });
  12. action2(first);
  13.  
  14. var action3 = new Action<string, string>((s1, s2) =>
  15. {
  16. Console.WriteLine($"Action<T1,T2>:{s1},{s2}");
  17. });
  18. action3(first, "second");
  19.  
  20. new Action(() => { Console.WriteLine(first); })();
  21. new Action<string>((s) => { Console.WriteLine($"Action<T>:{s}"); })(first);
  22. new Action<string, string>((s1, s2) =>
  23. {
  24. Console.WriteLine($"Action<T1,T2>:{s1},{s2}");
  25. })(first, "second");
  26. }
  27. }
  28. }

看一下反编译的结果:

  1. namespace ConsoleApp1
  2. {
  3. internal class Program
  4. {
  5. private static void Main(string[] args)
  6. {
  7. string first = "First";
  8. ((Action) (() => Console.WriteLine(first)))();
  9. ((Action<string>) (s => Console.WriteLine(string.Format("Action<T>:{0}", (object) s))))(first);
  10. ((Action<string, string>) ((s1, s2) => Console.WriteLine(string.Format("Action<T1,T2>:{0},{1}", (object) s1, (object) s2))))(first, "second");
  11. ((Action) (() => Console.WriteLine(first)))();
  12. string str1 = first;
  13. ((Action<string>) (s => Console.WriteLine(string.Format("Action<T>:{0}", (object) s))))(str1);
  14. string str2 = first;
  15. string str3 = "second";
  16. ((Action<string, string>) ((s1, s2) => Console.WriteLine(string.Format("Action<T1,T2>:{0},{1}", (object) s1, (object) s2))))(str2, str3);
  17. }
  18. }
  19. }

反编译结果是帮我们定义了几个变量。

System.Action的使用(lambda 表达式)的更多相关文章

  1. C# delegate event func action 匿名方法 lambda表达式

    delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...

  2. C#高级功能(一)Lambda 表达式

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LINQ ...

  3. 24.C# Lambda表达式

    1.Lambda表达式的含义 Lambda表达式是C#3.0引入的一种结构,使用它可以简化C#编程. 2.Lambda表达式与匿名方法 我们知道匿名方法可用于事件处理,如下delegate声明了一个匿 ...

  4. Linq快速入门——Lambda表达式的前世今生

    Linq快速入门——Lambda表达式的前世今生   Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托. 何为委托 ...

  5. Java8之熟透Lambda表达式

    一.Lambda简述 1.1.Lambda概述 ​ Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. ...

  6. 夯实Java基础(二十二)——Java8新特性之Lambda表达式

    1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ...

  7. Java 8新特性-3 Lambda 表达式

    在 Java 8 之前,匿名内部类,监听器和事件处理器的使用都显得很冗长,代码可读性很差. 在Java 8 之前使用匿名内部类: 例如 interface ITestPrint{ public voi ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. LinQ—Lambda表达式

    概述 本篇博客主要解说lambda表达式,在这里将它的来龙去脉,主要是从托付,匿名函数这些方面过度讲的,当然,在讲托付和匿名函数的时候,主要是从Lambda的角度出发讲的,可能它们还具有其他的一些作用 ...

  10. Python中lambda表达式学习

    lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...

随机推荐

  1. 5. Redis持久化

    5. Redis持久化5.1 RDB5.1.1 触发机制5.1.2 流程说明5.1.3 RDB文件的处理5.1.4 RDB的优缺点5.2 AOF5.2.1 使用AOF5.2.2 命令写入5.2.3 文 ...

  2. nc 画界面,触发效果(第一种)

    package nc.ui.hzctr.sellctr.action; import java.awt.BorderLayout; import java.awt.Dimension; import ...

  3. netty2 案例:数据通信

    在实际的项目中应该如何使用netty去通信呢? 一般来说,会有以下三种情况, 1长连接 也就是服务器和客户端的通道一直不关闭,如果服务器性能非常好,并且在客户端数量不是很多的情况下,可以选择使用这种方 ...

  4. httpd安装与配置(编译安装)

    httpd简介 httpd是Apache超文本传输协议(HTTP)服务器的主程序.被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池. 通常,httpd不应该被直接调用,而应该在类 ...

  5. Maven依赖及范围

    一.依赖范围(scope): 共5种,compile (编译).test (测试).runtime (运行时).provided.system compile:编译依赖范围,在编译,测试,运行时都需要 ...

  6. [C#.net]将null值插入SQL Server的Datetime

    之前处理SQL Server可以为空时间字段总是设置时间的最小值和最大值,今天才发现也可以把null用C#的代码插入到sql内 使用可空的值类型,代码如下 public DateTime? Servi ...

  7. sass基础常用指南

    一.变量 $global-color:red; .nav{ background:$global-color; } 二.sass命名时横杠和下划线不区分 $global-color:yellow; . ...

  8. css变换transform 以及 行内元素的一些说明

    变换transform的用法比较简单:[变换其实和普通的css属性,如color等没什么区别,可以为变换应用过渡或动画,就像其他普通css属性一样]#test { transform: transla ...

  9. s5-6 Linux 标准输出 系统优化 目录结构

    标准输出 重定向符号 #>   1>    标准输出重定向  先把文件的内容清空   把内容放在文件的最后一行 #>>  1>>   追加重定向      把内容放 ...

  10. Maths | 为什么点积等价于投影后的乘积

    目录 1. 复习点积 2. 点积的对称性 3. 矩阵与变换的关系 4. 一维矩阵也是一种线性变换 5. 最终解释:为什么是投影 先上结论: \(\boldsymbol v\)和\(\boldsymbo ...