新疆软件开发

本站首页 软件开发 成功案例 公司新闻 公司简介 客服中心 软件技术 网站建设
  您现在的位置: 大发国际老虎机官网 >> 开发语言 >> 文章正文

学习如何在Lambda表达式进行递归调用

   看到篇很好的文章,介绍给大家看看
    Lambda表达式是一个匿名的方法,在开发期我们是不知道其方法名是什么的,所以我们要怎么递归调用呢?如果你看过我这文章《让您知道您的方法是被何“人”调用 》的话,你应该会“啊哈”的拍一下头脑,思路就出来了,没错!!就是直接用StackFrame获取当前执行的方法,然后直接Invoke即可。
示例代码:
    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)

作者:未知 | 文章来源:cnblogs | 更新时间:2008-4-20 22:32:35

  • 上一篇文章:

  • 下一篇文章:

  • 相关文章:
    没有相关文章
    软件技术
    · 开发语言
    · Java技术
    · .Net技术
    · 数据库开发
    最新文章  
    ·搜集整理的asp.net的验证方
    ·各种FOR循环结构的整理
    ·软件项目开发中应该考虑那
    ·搜集整理的javascript sel
    ·软件开发中项目经理有那些
    ·学习如何在Lambda表达式进
    ·C++基础知识:结构体数据的
    ·C#实现短信发送程序的例子
    ·sun最近修补了一部分java的
    ·rss定制的另外一种实现方式
    ·delphi实现利用arp欺骗来实
    ·基础学习:基于WF的流程框
    ·网络编程中怎样得知一次数
    ·如何逆序输出单链表?
    ·软件开发过程中的性能设计
    关于我们 | 软件开发 | 下载试用 | 客服中心 | 联系我们 | 友情链接 | 网站地图 | 新疆电子地图 | RSS订阅
    版权所有 © 2016 大发国际老虎机官网 www.k8w.net All Rights Reserved 新ICP备14003571号
    新疆软件开发总机:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆乌鲁木齐北京中路华联大厦A-5C 邮编:830000