Feo*_*akt 2 c# treeview recursion anonymous-methods
美好的一天.我在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);
}
}
Run Code Online (Sandbox Code Playgroud)
但我必须有多余的方法"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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以把它称为:
allNodes.ApplyRecursively(node => MessageBox.Show(node.ToString()),
node => node.Nodes);
Run Code Online (Sandbox Code Playgroud)
这假设您正在使用适当的通用TreeView/ TreeNode类对.如果是这些System.Windows.Forms,你也需要打电话Cast.
allNodes.Cast<TreeNode>()
.ApplyRecursively(node => MessageBox.Show(node.ToString()),
node => node.Nodes.Cast<TreeNode>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |