问一个基础问题,有关Lambda表达式的。
unity3d吧
全部回复
仅看楼主
level 6
代码如下,我想给按钮增加事件。能点击事件输出对应的值:0,1,2
但是实际三个按钮都是输出3。这是什么情况?
Button[] buttons = new Button[3];
void Start()
{
buttons=transform.GetComponentsInChildren<Button>();
for (int i = 0; i < buttons.Length; i++)
{
buttons[i].onClick.AddListener(() =>
{
P(i);
});
}
}
public void P(int i)
{
Debug.LogError(i);
}
2022年07月05日 05点07分 1
level 12
把i在你绑定事件前用个变量存起来,传那个变量进去
2022年07月05日 05点07分 2
level 7
闭包了 你的i生命周期被委托延长了,当你点击按钮的时候你for循环里引用的i已经被刷成buttons.Length-1这个值了,解决办法 int index=i;P(i);
2022年07月05日 07点07分 5
level 8
循环完,i就等于3了
2022年07月05日 10点07分 6
level 4
你传进去的i 是在变化的
2022年07月05日 13点07分 7
level 6
原来是这样,谢谢各位大佬
2022年07月07日 02点07分 9
1