System.Action的使用(lambda 表达式)
对于Action的使用方法使用如下:
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string first = "First";
var action = new Action(() => { Console.WriteLine(first); });
action(); var action2 = new Action<string>((s) => { Console.WriteLine($"Action<T>:{s}"); });
action2(first); var action3 = new Action<string, string>((s1, s2) => {
Console.WriteLine($"Action<T1,T2>:{s1},{s2}");
});
action3(first, "second");
}
}
}
使用dotPeek通过反编译,得到代码:
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
string first = "First";
((Action) (() => Console.WriteLine(first)))();
((Action<string>) (s => Console.WriteLine(string.Format("Action<T>:{0}", (object) s))))(first);
((Action<string, string>) ((s1, s2) => Console.WriteLine(string.Format("Action<T1,T2>:{0},{1}", (object) s1, (object) s2))))(first, "second");
}
}
}
下面写一种与反编译出来的相似的方法
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string first = "First";
var action = new Action(() => { Console.WriteLine(first); });
action(); var action2 = new Action<string>((s) => { Console.WriteLine($"Action<T>:{s}"); });
action2(first); var action3 = new Action<string, string>((s1, s2) =>
{
Console.WriteLine($"Action<T1,T2>:{s1},{s2}");
});
action3(first, "second"); new Action(() => { Console.WriteLine(first); })();
new Action<string>((s) => { Console.WriteLine($"Action<T>:{s}"); })(first);
new Action<string, string>((s1, s2) =>
{
Console.WriteLine($"Action<T1,T2>:{s1},{s2}");
})(first, "second");
}
}
}
看一下反编译的结果:
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
string first = "First";
((Action) (() => Console.WriteLine(first)))();
((Action<string>) (s => Console.WriteLine(string.Format("Action<T>:{0}", (object) s))))(first);
((Action<string, string>) ((s1, s2) => Console.WriteLine(string.Format("Action<T1,T2>:{0},{1}", (object) s1, (object) s2))))(first, "second");
((Action) (() => Console.WriteLine(first)))();
string str1 = first;
((Action<string>) (s => Console.WriteLine(string.Format("Action<T>:{0}", (object) s))))(str1);
string str2 = first;
string str3 = "second";
((Action<string, string>) ((s1, s2) => Console.WriteLine(string.Format("Action<T1,T2>:{0},{1}", (object) s1, (object) s2))))(str2, str3);
}
}
}
反编译结果是帮我们定义了几个变量。
System.Action的使用(lambda 表达式)的更多相关文章
- C# delegate event func action 匿名方法 lambda表达式
		
delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...
 - C#高级功能(一)Lambda 表达式
		
Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LINQ ...
 - 24.C# Lambda表达式
		
1.Lambda表达式的含义 Lambda表达式是C#3.0引入的一种结构,使用它可以简化C#编程. 2.Lambda表达式与匿名方法 我们知道匿名方法可用于事件处理,如下delegate声明了一个匿 ...
 - Linq快速入门——Lambda表达式的前世今生
		
Linq快速入门——Lambda表达式的前世今生 Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托. 何为委托 ...
 - Java8之熟透Lambda表达式
		
一.Lambda简述 1.1.Lambda概述  Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. ...
 - 夯实Java基础(二十二)——Java8新特性之Lambda表达式
		
1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ...
 - Java 8新特性-3    Lambda 表达式
		
在 Java 8 之前,匿名内部类,监听器和事件处理器的使用都显得很冗长,代码可读性很差. 在Java 8 之前使用匿名内部类: 例如 interface ITestPrint{ public voi ...
 - 0028 Java学习笔记-面向对象-Lambda表达式
		
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
 - LinQ—Lambda表达式
		
概述 本篇博客主要解说lambda表达式,在这里将它的来龙去脉,主要是从托付,匿名函数这些方面过度讲的,当然,在讲托付和匿名函数的时候,主要是从Lambda的角度出发讲的,可能它们还具有其他的一些作用 ...
 - Python中lambda表达式学习
		
lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...
 
随机推荐
- 为什么Firefox在SSH上这么慢?
			
为什么Firefox在SSH上这么慢? Modified on: Fri, 13 Jul 2018 18:37:30 +0800 我尝试使用 通过SSH启动Firefox ssh -X user@ho ...
 - 安卓ViewStub用法
			
安卓ViewStub用法 在开发应用程序的时候,经常会遇到这样的情况,在运行时动态根据条件来决定显示哪个View或某个布局. 那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为 ...
 - JSP内置对象seesion
			
什么是session session表示客户端与服务器的一次会话 Web中的session指的是用户在浏览某网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间 从上述定 ...
 - IIS7部署网站遇到的问题
			
1.web.config文件中更改配置项时: 因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改. 运行命令行 %windir%\system32\ ...
 - Codeforces 1082C Multi-Subject Competition 前缀和 A
			
Codeforces 1082C Multi-Subject Competition https://vjudge.net/problem/CodeForces-1082C 题目: A multi-s ...
 - xml配置文件中常见的命名空间解释
			
1.1schema文档即xml schema document,schema文件的格式是.xsd(xml schema document的缩写xsd). 简单来说:schema就是对xml的进一步约束 ...
 - ota升级动画背景色修改
			
https://wenku.baidu.com/view/0d63ad25192e45361066f549.html https://blog.csdn.net/huangyabin001/artic ...
 - C# 从后台代码同步或异步注册Javascript到页面之RegisterStartupScript和RegisterClientScriptBlock的区别
			
下面来讲讲同步注册JS和异步注册JS的区别 同步注册JS:RegisterClientScriptBlock,相当于在 form开始处(紧接 <form runat="server&q ...
 - Centos 7 搭建.net web项目
			
现在的.NET Core 1.0版本是一个很小的核心,APIs和工具也并不完整,但是随着.Net Core的不断完善,补充的Apis和创新也会一起整合到.NET Framework中. 安装cento ...
 - 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
			
一.Intellij IDEA的简介 Intellij IDEA是java语言的集成开发环境,与Eclipse相比,它的功能更多.更强大.更智能,Eclipse更适合刚学习java语言的初学者,它操作 ...