如何将函数作为参数传递

时间:2013-02-06 12:56:55

标签: c#

好的,我已经将函数作为参数传递给另一个函数,如下所示:

someFunction(..., passFunc);
passFunc(){ MessageBox.Show("Message"); }
private void someFunction(..., Func<int> f) { f(); }

这很好用。我将“passFunc”作为参数传递给“someFunction”,然后调用此参数(“f()”)。然后我得到了带有文字“消息”的消息框。确定。

在程序的后续版本中,当我点击特定按钮时调用函数“passFunc”... 然后我希望得到文字。我通常这样做:((Button)sender).Text;。但在这种情况下,我无法做到这一点,因为我在这个“passFunc”中没有参数。

我该怎么做?所以,“passFunc”看起来像:passFunc(object sender, EventArgs e)

然后我就能做到这一点:

passFunc(object sender, EventArgs e)
{
    MessageBox.Show(((Button)sender).Text);
}

这里是代码:http://pastie.org/6079188

2 个答案:

答案 0 :(得分:1)

如果要将输入传递给func,请使用此泛型类型重载:

Func<string, int> passFunc

编辑:

您可以像这样致电passFunc

passFunc("some input");

EDIT2:

passFunc(object sender, EventArgs e)不能与Func一起使用,因为它可能具有void返回类型。 然后,您必须使用Action<object, EventArgs>

答案 1 :(得分:0)

为什么不将passFunc订阅到该按钮的事件处理程序? 它看起来像这样 button1.Click += new EventHandler(passFunc) 然后passFunc将是

void passFunc(object sender, EventArgs e)
{
     MessageBox.Show((sender as Button).Text); 
}

我不知道这是否是您想要实现的目标,但它可能会有效。