Как передеать в метод значение переменной, а не ссылку в памяти

249
31 августа 2021, 18:00

Я в цикле генерирую карту состоящий из кнопок, каждой из них надо создать уникальный Listener. Генератор карты:

for (int y = 0; y < 3; y++)
{
    for (int x = 0; x < 5; x++)
    {
        GameObject button = Instane(/* some settings */);
        button.GetComponent<Button>().onClick.AddListener(delegate { Function(y, x); });
    }
}

Так получается что все Listeners имеют ссылку на область в памяти, то есть на x и y и все они будут возвращать 3, 5 , так как после завершения цикла они равны 3, 5 и не удаляются так как в Listener все еще есть ссылка на x и y. Так вот, как сделать так, чтоб в метод передавалась не ссылка на объект в памяти, а именно значение, чтоб это было похоже на это new int[] { 1, 2 } , а не это new int[] { &x , &y }?

Answer 1

Замкнитесь локальные переменные внутри цикла:

for (int y = 0; y < 3; y++)
{
    for (int x = 0; x < 5; x++)
    {
        GameObject button = Instane(/* some settings */);
        int x1 = x, y1 = y;
        button.GetComponent<Button>().onClick.AddListener(delegate { Function(y1, x1); });
    }
}
READ ALSO
Данные с плавающей запятой в DataGrid C# MySql

Данные с плавающей запятой в DataGrid C# MySql

Помогите пожалуйста разобратьсяМне необходимо чтобы в DataGrid в колонку "Задолженность" выводилось число с 2 знаками после запятой

301
Связь many-to-many для трех моделей

Связь many-to-many для трех моделей

Есть три модели - школа, учителя и ученики

231
Конвертация HTML в PDF средствами C#

Конвертация HTML в PDF средствами C#

Имеется HTML-страница, состоящая из 3х таблиц(пустых), которые заполняются с помощью JavaScript с определенной периодичностью(данные таблиц обновляются)Страница...

146