日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

编写递归调用的Lambda表达式

發布時間:2025/7/25 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写递归调用的Lambda表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前段時間,我寫一個樹的訪問算法的時候,用了Visitor模式把訪問的算法分離了出來,當時打算用lambda表達式寫visit算法的,卻發現帶遞歸調用的lambda表達式沒想象的那么好寫,憋了半天愣是沒寫出來,由于當時趕進度,就寫成了普通的函數了。

今天晚上研究了一下遞歸調用的Lambda表達式的寫法,發現也還是比較簡單的,就是腦袋要轉個彎(可能當時這個彎沒有轉過來),首先給一個簡單的示例:

??? int i = 1;

??? RecursiveRun(self =>

??????? {

??????????? Console.WriteLine("hello world " + i++);

??????????? self();

??????? });

?

??? static void RecursiveRun(Action<Action> action)

??? {

??????? action(() => RecursiveRun(action));

??? }

可能有人說函數RecursiveRun是無參數的,基本上沒什么用,下面這個就是帶一個參數的版本了(如果需要更多的參數的版本,直接把RecursiveRun函數稍稍修改即可):

??? static void RecursiveRun<T>(T obj, Action<T, Action<T>> action)

??? {

??????? action(obj, o => RecursiveRun(o, action));

??? }

通過這個函數,就可以把二叉樹的遍歷算法用lambda表達式給表示出來了:

??? class BinTree

??? {

??????? public int Value { get; set; }

??????? public BinTree Left { get; set; }

??????? public BinTree Right { get; set; }

?

??????? public BinTree(int value)

??????? {

??????????? this.Value = value;

??????? }

?

??????? public void Accept(Action<BinTree> visitor)

??????? {

??????????? visitor(this);

??????? }

?

??????? public void Accept(Action<BinTree, Action<BinTree>> visitor)

??????? {

??????????? visitor(this, node => node.Accept(visitor));

??????? }

?

??????? public override string ToString()

??????? {

??????????? return Value.ToString();

??????? }

??? }

?

??? var nodes = Enumerable.Range(0, 5).Select(i => new BinTree(i)).ToArray();

?

??? nodes[0].Left = nodes[1];

??? nodes[0].Right = nodes[2];

??? nodes[1].Left = nodes[3];

??? nodes[1].Right = nodes[4];

?

??? nodes[0].Accept((node, visitor) =>

??????? {

??????????? Console.WriteLine(node.Value);

??????????? if (node.Left != null)

??????????????? visitor(node.Left);

??????????? if (node.Right != null)

??????????????? visitor(node.Right);

??????? });

?

?

轉載于:https://www.cnblogs.com/TianFang/archive/2011/08/25/2153793.html

總結

以上是生活随笔為你收集整理的编写递归调用的Lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。