C# 如何:将变量传递给System.Action,它不会';我没有任何情妇

C# 如何:将变量传递给System.Action,它不会';我没有任何情妇,c#,C#,这就是我想要实现的代码。 (可能不正确,或者无法实现??) var buttons=this.buttons; 用于(int i=0;ionClick(按钮)订阅按钮的onClick事件;。这个lambda是一个带有0个参数的void委托,就像一个动作一样,因此可以用来订阅onClick事件 本质上,您获取局部变量button的值,并在lambda中使用它,只有在调用事件时才会调用它 您的行应该是这样的:button.onClick+=()=>onClick(button);您可以使用lambd

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

var buttons=this.buttons;
用于(int i=0;i
您可以使用lambdas转发事件。这不是世界上最漂亮的事情。您可以使用
()=>onClick(按钮)订阅按钮的
onClick
事件;
。这个lambda是一个带有0个参数的void委托,就像一个动作一样,因此可以用来订阅
onClick
事件

本质上,您获取局部变量
button
的值,并在lambda中使用它,只有在调用事件时才会调用它


您的行应该是这样的:
button.onClick+=()=>onClick(button);

您可以使用lambdas转发事件。这不是世界上最漂亮的事情。您可以使用
()=>onClick(button)订阅按钮的
onClick
事件;
。这个lambda是一个带有0个参数的void委托,就像一个动作一样,因此可以用来订阅
onClick
事件

本质上,您获取局部变量
button
的值,并在lambda中使用它,只有在调用事件时才会调用它


您的行应该如下所示:
button.onClick+=()=>onClick(button);

谢谢你的回答。但是,如果我使用lambda,我不知道如何从onClick事件中删除lambda。实际上,我正在寻找解决此问题的最佳解决方案。谢谢你的回答。但是,如果我使用lambda,我不知道如何从onClick事件中删除lambda。实际上,我正在寻找是否有一个最佳解决方案解决这个问题的方法很简单。
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
}