如何:将变量传递给没有任何参数的System.Action

时间:2016-12-09 02:27:59

标签: c#

这是我想要实现的代码。 (也许这不正确,或者无法实现???)

var buttons = this.buttons;
for (int i = 0; i < buttons.Length; ++i)
{
   var button = buttons[i];
   // I want to pass current button to onClick,
   // but onClick is a delegate with no param just like System.Action.
   button.onClick += OnClick;
}

void OnClick(Button button)
{
   // Do something
}

1 个答案:

答案 0 :(得分:2)

您可以使用lambdas转发事件。它不是世界上最美丽的东西。您可以使用UITextFieldDelegate订阅按钮的func textFieldShouldReturn(_ textField: UITextField) -> Bool { return true } 事件。这个lambda是一个带有0个参数的void委托,就像一个Action,因此可以用来订阅onClick事件。

基本上,你取局部变量() => OnClick(button);的值并在lambda中使用它,只在调用事件时调用它。

您的行应如下所示:onClick