在通过for循环传递按钮在数组中所在下标时出现的问题
for (int i = 0; i < _buttons.Length; i++)
{
_buttons[i].onClick.AddListener(() => OnButtonClick(index));
}
在上面的代码块中最终传递的参数是i的最终值,解释如黄色区域文字
解决办法通过新建变量将按钮传递的参数指引向不同的地址,因为for每次执行都是新建的不同的变量,所以可以实现。
for (int i = 0; i < _buttons.Length; i++)
{
int index = i;
_buttons[i].onClick.AddListener(() => OnButtonClick(index));
}
通过查询资料,发现C#中,当使用匿名委托时,会捕捉本地调用方法的完整上下文,原因是:
匿名委托在创建时会自动捕获其外部作用域中的变量,这样做的目的是为了确保在委托执行时,可
以访问到委托创建时的上下文状态:
匿名委托捕获本地调用方法的完整上下文有以下几个原因:
匿名委托实际上是一个闭包,它可以访问其创建时所在作用域中的变量。为了实现这
种闭包行为,编译器会将这些变量的引用保存在委托对象中,以便在委托执行时可以访问它们。
通过创建变量,让不同的按钮捕捉不同的上下文,或引用不同的变量。