【问题标题】:Action<> object as a parameter to function and using itAction<> 对象作为函数的参数并使用它
【发布时间】:2014-06-04 07:12:38
【问题描述】:

我有这个函数作为遍历我的树视图的解决方案:

protected void PerformActionOnNodesRecursive(TreeViewNodeCollection nodes, Action<TreeViewNode> action)
{
    foreach (TreeViewNode node in nodes)
    {
        action(node);
        if (node.Nodes.Count > 0)
            PerformActionOnNodesRecursive(node.Nodes, action);
    }
}

但我无法理解的是如何实现我的操作或每个节点所需的操作。

谁能告诉我如何使用这个动作对象并定义一个自定义动作?

【问题讨论】:

  • 像这样:PerformActionOnNodesRecursive(myNodes, (node) =&gt; { /* whatever you need to do */ });

标签: c# .net lambda action


【解决方案1】:

您可以像这样拨打Action

PerformActionOnNodesRecursive(node.Nodes, (node) => node.SomeProperty = "123");

或者:

PerformActionOnNodesRecursive(node.Nodes, (node) => 
    {
        // you can place multiple statements here.
    });

或者:

PerformActionOnNodesRecursive(node.Nodes, (node) => CallSomeOtherMethod(node));

关于 lambda 表达式的一些有用信息可以在 MSDN 上找到。

【讨论】:

  • 感谢帕特里克,在进一步挖掘时,我了解到只有在需要时才必须使用这种技术,因为它需要更多的执行时间。但确实有很多方便。如果我错了,请纠正我,也请建议我可以以正确方式学习的正确地方。我是一个自学者。除了 C 语言,我从来没有上过任何课。我是从网上的书籍和信息中学到的,直到最近我还没有定期获得这些信息,所以你会发现与常规路径有很多偏差。
  • @user50927:没问题。您可以了解 lambda 表达式here
  • 对不起,我以为我没有接受它并再次单击它。我又接受了。
  • @user50927:你一直在切换接受的答案?其中任何一个都被标记为“答案”。选择一个,并坚持下去。
  • 我不明白。我标记了两者,因为您的答案是准确的,而另一个几乎是我想要的答案。我不知道我不能标记多个答案。
【解决方案2】:

您可以按如下方式创建您的Action

PerformActionOnNodedRecursive(node, new Action(t => t.Text = "Test"));

现在每个子节点和节点本身都会收到文本“Test”

【讨论】:

  • 不需要new Action。可以将 lambda 表达式转换为 Action
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2014-06-28
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多