新疆軟件開發

本站首頁 軟件開發 成功案例 公司新聞 公司簡介 客服中心 軟件技術 網站建設
  您現在的位置: 新疆二域軟件開發公司 >> 開發語言 >> 文章正文

學習如何在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
     
    平码爱码论坛