Как я могу установить различные значения для кнопок и передать его прослушиваемым функциям? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть массив кнопок, используемых для выбора элементов из массива. То, что я пытаюсь сделать, - это использовать одну функцию для обработки этого, например, приведенный ниже код, вместо того, чтобы писать множество функций, просто выполняя небольшую работу.

Тем не менее, кажется, что все эти кнопки установлены на последнюю i, и она выдает исключение «массив вне границ» каждый раз, когда я нажимаю на кнопку.

Есть ли лучший способ сделать это?

Я решил поискать индекс нажатой кнопки, но мне это кажется странным и может быть медленным.

public Button[] MPS;

 for(int i = 0; i < gm.MP.Length; i++)
 {
   MPS[i].onClick.AddListener(() => MPButtonHandle(i));
 }

void MPButtonHandle(int i)
{
    MP = gm.MP[i];
};

1 Ответ

6 голосов
/ 24 апреля 2019

В основном вам нужно сделать локальную копию переменной i:

public Button[] MPS;
for(int i = 0; i < gm.MP.Length; i++)
{
    int j = i;
    MPS[i].onClick.AddListener(() => MPButtonHandle(j));
}

void MPButtonHandle(int i)
{
    MP = gm.MP[i];
};

Причиной всего этого является механизм, называемый замыканиями. Вы можете найти больше информации об этом здесь: c # closures

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...