C# 匿名回调方法在循环体中使用的注意事项

汐夜koshio
发布
于
2020-03-19 15:53:39
发布
于
2020-03-19 15:53:39
今天在做AVG工具的选择分支功能时发现了一个问题,先把代码贴上来:
1 private void SelectionParse(string value)
2 {
3 string[] ss = value.Split('|');
4 List<GameObject> s_inss = new List<GameObject>();
6 view.selection.SetActive(true);
8 for (int i = 0; i < ss.Length; i++)
9 {
10 string sc = ss[i].Split('@')[0];
11 string sid = ss[i].Split('@')[1];
13 var ins = Instantiate(view.s_itemPrefab, view.selection.transform);
15 s_inss.Add(ins);
17 ins.GetComponentInChildren<Text>().text = sc;
18 int si = i;
19 ins.GetComponent<Button>().onClick.AddListener(() =>
20 {
21 Debug.Log(i);
22 Debug.Log(si);
23 int id = int.Parse(sid);
24 view.AddLogText("", sc);
25 JumpToIDLine(id);
26 foreach (var s_ins in s_inss)
27 {
28 s_ins.GetComponent<Button>().onClick.RemoveAllListeners();