好的,我已经将函数作为参数传递给另一个函数,如下所示:
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);
}
答案 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);
}
我不知道这是否是您想要实现的目标,但它可能会有效。