lambda表达式-编译测试

简介:

我不会IL,也不想学IL,所以为了测试Lambda表达式编译的原理,只能使用调试进行试验来认识:

第一种情况,当Lambda表达式没有用到函数外的变量时:

class MyClass2
{
    public Action TestLambda()
    {
        Action action = () =>
        {
            Console.WriteLine(DateTime.Now);
        };
        return action;
    }
    public static void Test()
    {
        MyClass2 c2 = new MyClass2();
        var action = c2.TestLambda();
        var action2 = c2.TestLambda();

        Console.WriteLine(action.Method.DeclaringType.FullName);//"ConsoleApp.Program+MyClass2"
        Console.WriteLine(action.Method.IsStatic);//"true"
        Console.WriteLine(action.Target);//"" null
        Console.WriteLine(action == action2);//true
    }
}

这种情况下,action被编译成了MyClass2的静态方法

 

第二种情况,当Lambda表达式使用到函数外的变量时:

class MyClass
{
    public Action TestLambda()
    {
        int i = 1;
        int j = 5;
        Action action = () =>
        {
            Console.WriteLine(i);
            Console.WriteLine(j);
        };
        i++;
        return action;
    }
    public static void Test()
    {
        MyClass c = new MyClass();
        var action = c.TestLambda();
        var action2 = c.TestLambda();
        action();//2
        Console.WriteLine(action.Target.GetType().FullName);//"ConsoleApp.Program+MyClass+<>c__DisplayClass6"
        Console.WriteLine(action.Method.DeclaringType.FullName);//"ConsoleApp.Program+MyClass+<>c__DisplayClass6"
        Console.WriteLine(action == action2);//false
        Console.WriteLine(action.Target == action2.Target);//false
    }
}

调试发现action.Target如下:

image

也就是说这时候,这个lambda编译成了一个私有类的实例方法,而且数据就是外部被使用的变量

另外,每次调用TestLambda获取到的action.Target都是一个新的对象


本文转自BloodyAngel博客园博客,原文链接:http://www.cnblogs.com/zgynhqf/archive/2009/12/25/1632086.html,如需转载请自行联系原作者

相关文章
|
10月前
|
算法 异构计算 索引
m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核
m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核
155 1
|
10月前
|
Linux 编译器 数据安全/隐私保护
Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过
FFmpeg作为一个流媒体的整体解决方案,在很多项目中都使用了它,如果我们也需要使用FFmpeg进行开发,很多时候我们需要将源码编译成动态库或者静态库,然后将库放入到我们的项目中,这样我们就能在我们的项目中使用FFmpeg提供的接口进行开发。关于FFmpeg的介绍这里就不过多说明。
401 0
|
10月前
|
算法
m基于OFDM+QPSK和LDPC编译码以及MMSE信道估计的无线图像传输matlab仿真,输出误码率,并用图片进行测试
MATLAB2022a仿真实现了无线图像传输的算法,包括OFDM、QPSK调制、LDPC编码和MMSE信道估计。OFDM抗频率选择性衰落,QPSK用相位表示二进制,LDPC码用于前向纠错,MMSE估计信道响应。算法流程涉及编码、调制、信道估计、均衡、解码和图像重建。MATLAB代码展示了从串行数据到OFDM信号的生成,经过信道模型、噪声添加,再到接收端的信道估计和解码过程,最终计算误码率。
103 1
|
10月前
|
算法 异构计算
m基于FPGA的RS+卷积级联编译码实现,RS用IP核实现,卷积用verilog实现,包含testbench测试文件
m基于FPGA的RS+卷积级联编译码实现,RS用IP核实现,卷积用verilog实现,包含testbench测试文件
86 0
|
7月前
|
测试技术 开发工具 Python
在Jetson Nano上编译 pyrealsense2库包,并在Intel的tof相机上进行测试
在Jetson Nano上编译 pyrealsense2库包,并在Intel的tof相机上进行测试
338 0
|
10月前
|
资源调度 算法
m基于OFDM+QPSK和LDPC编译码以及LS信道估计的无线图像传输matlab仿真,输出误码率,并用图片进行测试
m基于OFDM+QPSK和LDPC编译码以及LS信道估计的无线图像传输matlab仿真,输出误码率,并用图片进行测试
116 2
|
10月前
|
存储 资源调度 算法
m基于FPGA和IP核的RS编译码verilog实现,包含testbench测试文件
m基于FPGA和IP核的RS编译码verilog实现,包含testbench测试文件
155 1
|
2月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
1月前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
96 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
26天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
61 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡

热门文章

最新文章