C#如何实现递归调用的Lambda表达式
短信预约 -IT技能 免费直播动态提醒
这篇文章主要讲解了“C#如何实现递归调用的Lambda表达式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现递归调用的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); });
感谢各位的阅读,以上就是“C#如何实现递归调用的Lambda表达式”的内容了,经过本文的学习后,相信大家对C#如何实现递归调用的Lambda表达式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341