2012-02-10 2 views
-1

(Здесь нет реальной функции, но мне было просто интересно.)Динамические имена переменных в C#?

Представьте себе эту функцию, где я прохожу 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 
     } 
    } 
} 

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

Возможно, мне не хватает чего-то очевидного здесь - я не очень опытен.

+2

Учитывая, что 'number' является int, я честно понятия не имею, что вы надеетесь' number [x, y] 'будет делать. –

+0

Не могли бы вы сделать сетку параметром метода? – cadrell0

ответ

2

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

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

+0

Мой пример был действительно плохим, я пытаюсь придумать новый пример :) –

+0

@SimonVerbeke: Просто из интереса, если вы не можете придумать хороший пример, почему для вас важно, может ли это быть достигнуты? Я бы сосредоточил внимание на тех методах, которые вы * на самом деле хотите использовать :) –

+0

Я просто обдумывал такую ​​вещь. И я спросил его, прежде чем думать об этом. Теперь я понимаю, что на самом деле нет способа использовать это. Кроме того, может быть, что сказала Норла. Но это также может быть достигнуто с помощью регулярного цикла. –

1

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

0

Такого рода вещи существует в PHP, когда вы используете что-то вроде этого $$ где $ вар вар будет держать СЕТКА1 и превращаются в $ СЕТКА1

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

+0

К счастью, вы правильно истолковали мой пример, потому что это кажется плохим примером. Словарь действительно может быть решением :) –

+0

PHP не является статически типизированным языком, поэтому вы можете делать всевозможные сумасшедшие :) – jrummell

3

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

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

затем

if (grids[number][x,y])... 
+0

Это тоже может сделать трюк :) –

0

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

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 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^