1

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

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

4

2 回答 2

1

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

Func<string, int> passFunc

编辑:

passFunc这样打电话

passFunc("some input");

编辑2:

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

于 2013-02-06T13:08:50.173 回答
0

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

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

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

于 2013-02-06T13:01:49.640 回答