当前位置: 代码迷 >> 综合 >> 循环中动态添加监听的问题
  详细解决方案

循环中动态添加监听的问题

热度:95   发布时间:2024-01-24 10:50:10.0
for (int i = 0; i < list.Count - 1; i++)
{//第一段list[i].GetComponent<Button>().onClick.AddListener(() =>{OnClick(list[i + 1]);});//第二段Button button = list[i + 1].GetComponent<Button>();list[i].GetComponent<Button>().onClick.AddListener(() =>{OnClick(button.gameObject);});}

两次碰到问题,都是下意识的写出了第一种写法,在点击触发回调时,引用到的对象都是数组的最后一个对象。原因是添加监听时,回调方法并不会立即执行,所以对应的i的值也不会立即传入,而i的所有值在内存中都是同一个地址,所以当点击触发时,i已经变成了list.count-2,所以引用的对象都是数组的最后一个对象了。

第二种写法则是传入了对应的对象,每个对象都有自己的地址,所以不会有上述问题。

  相关解决方案