gpt4 book ai didi

c# - C#中的递归和匿名方法

转载 作者:行者123 更新时间:2023-11-30 19:40:50 25 4
gpt4 key购买 nike

美好的一天。我有在 TreeView 中递归遍历 TreeNode 的方法:

public void ShowTree(TreeView tree)
{
foreach (TreeNode node in tree.Nodes)
{
ShowNode(node);
}
}

private void ShowNode(TreeNode node)
{
MessageBox.Show(node.ToString());
foreach (TreeNode child in node.Nodes)
{
ShowNode(child);
}
}

但我必须有多余的方法“ShowNode”,它不会在其他任何地方使用。如何使这个方法匿名并合并这两个方法?

最佳答案

如果您打算将其分开,我实际上会将递归部分与“您对每个节点执行的操作”部分分开。所以像这样:

public static void ApplyRecursively<T>(this IEnumerable<T> source,
Action<T> action,
Func<T, IEnumerable<T>> childSelector)
{
// TODO: Validation
foreach (var item in source)
{
action(item);
childSelector(item).ApplyRecursively(action, childSelector);
}
}

然后你可以这样调用它:

allNodes.ApplyRecursively(node => MessageBox.Show(node.ToString()),
node => node.Nodes);

这是假设您使用的是适当的通用 TreeView/TreeNode 类对。如果这些来自 System.Windows.Forms,您还需要调用 Cast

allNodes.Cast<TreeNode>()
.ApplyRecursively(node => MessageBox.Show(node.ToString()),
node => node.Nodes.Cast<TreeNode>());

关于c# - C#中的递归和匿名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21671443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com