Unity for循环按钮加添事件(监听)
错误做法 1
for (int i = 0; i < _toolbtns.Count; i++)
{
_toolbtns[i].onClick.AddListener(() =>
{
print(_toolTypeList[i].Name);
});
}
解析: 当按钮点击时,循环已经完毕。i 等于count 。
错误做法 2
for (int i = 0; i < _toolbtns.Count; i++)
{
_toolbtns[i].onClick.AddListener(() =>
{
int x = i;
print(_toolTypeList[x].Name);
});
}
解析: 与1类似。当按钮点击时,循环已经完毕。i 等于count 。x = i ;x 还是count;
正确做法
for (int i = 0; i < _toolbtns.Count; i++)
{
int x = i;
_toolbtns[i].onClick.AddListener(() =>
{
print(_toolTypeList[x].Name);
});
}
解析:局部变量 x存放了当前循环中 i 的值。x = i 的操作,每次都会在内存重新开辟4字节内存(n*4),存储下来本次 i 的值。 形成如:0,1,2,3,4,…,n 的序列 而错误做法,为 i 申请4字节内存。对同一内存区域进行改变 形式如下 0 1 2 … n
|