• 在Lambda表达式中进行递归调用


    示例代码: 


        class Test 
        { 
            /**//// <summary> 
            ///  
            /// </summary> 
            /// <param name="v1"></param> 
            /// <param name="v2"></param> 
            /// <param name="num"></param> 
            /// <param name="total"></param> 
            /// <returns></returns> 
            public delegate long AddMethod(long v1, long v2, int num, int cout); 

            /**//// <summary> 
            ///  
            /// </summary> 
            /// <param name="addMethod"></param> 
            /// <param name="cout"></param> 
            static void Print(AddMethod method, int cout) 
            { 
                Console.WriteLine(method(0, 1, 2, cout)); 
            } 

            static void Main() 
            { 
                //求0,1,1,2,3,5,8.类似的数据队列在第30个位置的数 
                Print((v1, v2, num, cout) => 
                    { 
                        Console.Write(v1); 
                        Console.Write(","); 

                        num++; 
                        if (num == cout) 
                        { 
                            Console.Write(v2);    
                            Console.WriteLine(); 
                            return v1 + v2;

       } 
                        else 
                        {                         
                            //取得当前方法 
                            StackFrame frame = new StackFrame(0); 
                            //递归调用 
                            return (long)(frame.GetMethod().Invoke(num, new object[] { v2, (v1 + v2), num, cout })); 
                        } 
                    }, 30); 
                Console.Read(); 
            } 
        } 
    我们的代码成功运行了,成功的求出在第30个位置的数值是:514229 

    其时,.NET里还有一个东东可以方便的得到当前调用方法的引用,这东东就是MethodBase,其有一个静态方法GetCurrentMethod 可直接获取当前执行的方法引用,所以我们可以将上面的StackFrame处的两句代码改为如下: 
                            //递归调用 
                            return (long)(MethodBase.GetCurrentMethod().Invoke(num, new object[] { v2, (v1 + v2), num, cout })); 
    执行后的结果都是一样的(不一样才怪了Orz)

  • 相关阅读:
    (Linux基础学习)第五章:Linux中的screen应用
    (Linux基础学习)第四章:Linux系统中的日期和时间介绍和ntpdate命令
    (Linux基础学习)第三章:terminal与shell的简介和修改命令提示符颜色
    (Linux基础学习)第二章:CentOS7.4安装教程
    (Linux基础学习)第一章:科普和Linux系统安装
    Linux基础入门 第一章:Linux环境搭建——Redhat 6.4图文安装教程
    结合Zabbix与Ansible打造自动化数据库监控体系
    Jenkins Tomcat 环境搭建
    SVN 服务器的搭建
    Dockerfile 创建redis容器
  • 原文地址:https://www.cnblogs.com/shatongtian/p/2759694.html
Copyright © 2020-2023  润新知