Имена динамических переменных в C #? - PullRequest
0 голосов
/ 11 февраля 2012

(Нет реальной функции, где мне это нужно, но мне просто интересно.)

Представьте себе эту функцию, где я передаю bool[,].Это bool[,] называется grid1 или grid2, в зависимости от ситуации.

Мне было интересно, могу ли я сделать что-то вроде следующего:

void CheckGrid(bool[,] grid, int number)
{
    for (int x = 0; x <= gridXmax - 1; x++)
    {
        for (int y = 0; y <= gridYmax - 1; y++)
        {
            if(grid + number[x,y]) //this will check against grid1 or grid2, depending on int number
                //logic depends on whether it's grid1 or grid2
        }
    }
}

Гадать по вопросамдля других языков это, вероятно, невозможно.Но вы никогда не знаете:)

Вполне возможно, что я упускаю что-то очевидное здесь - я не очень опытный.

Ответы [ 5 ]

3 голосов
/ 11 февраля 2012

Вы можете создать массив сеток, а затем использовать числовое значение, чтобы проверить это.

List<bool[,] grids = new List<bool[,]>();

тогда

if (grids[number][x,y])...
2 голосов
/ 11 февраля 2012

Нет - у объекта нет имени, только у переменной есть имя. Поэтому, несмотря на то, что вы передаете ссылку на массив, метод не может узнать, использовали ли вы в качестве аргумента переменную с именем grid1 или переменную с именем grid2.

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

1 голос
/ 11 февраля 2012

Вам лучше передать флаг вашей функции, который позволит вам обновлять логику в зависимости от того, имеете ли вы дело с grid1 или grid2.

0 голосов
/ 11 февраля 2012

Добавьте измерение к вашему массиву.

void CheckGrid(bool[,,] grid, int number)
{
    for (int x = 0; x <= gridXmax - 1; x++)
    {
        for (int y = 0; y <= gridYmax - 1; y++)
        {
            if(grid[number, x,y]) //this will check against grid1 or grid2, depending on int number
                //logic depends on whether it's grid1 or grid2
        }
    }
}  
0 голосов
/ 11 февраля 2012

Такая вещь существует в PHP, когда вы используете что-то вроде этого $$ var, где $ var будет содержать grid1 и превращаться в $ grid1

Единственное, что я мог предложить, это использовать пары «ключ / значение» в словаре и объединить число в «сетку»

...