Как я могу создать последовательность пронумерованных переменных во время выполнения? - PullRequest
0 голосов
/ 01 июля 2010

Друзья, я должен создать серию ArrayList с, каждый из которых содержит объектов неизвестного происхождения , с каждым экземпляром, назначенным отдельной локальной переменной.

Пока все хорошо ... Но мне также нужно, чтобы имя каждой локальной переменной следовало очень специфическому шаблону: имя должно начинаться с «oArr», за которым следуют одна или несколько цифр, отражающих положение этого конкретного массива впоследовательность.Кроме того, я не буду знать во время компиляции, сколько из этих массивов - и, следовательно, сколько локальных переменных - мне понадобится!

Мне кажется, что это, возможно, проблема, которая может быть решенаналичие динамических типов в C # 4.0, однако я совсем не знаком с их использованием.Как я могу взять код, подобный этому ...

int i=0;
foreach(something)
{
    ArrayList oArr+i=new ArrayList();
    i++;
}

... и превратить его во что-то, что соответствует критериям, изложенным выше и фактически компилируется?

ПоочередноЕсть ли более простой, вменяемый подход к этой проблеме?

Ответы [ 3 ]

6 голосов
/ 01 июля 2010

Вы не можете изменить имя переменной во время выполнения, так как код (даже код c #) был скомпилирован с определенным именем переменной. Если бы вы могли изменить имя во время выполнения, это вызвало бы проблемы.

Например, если язык позволял изменять имена переменных, то при попытке доступа к переменной с именем 'var1' компилятор не имеет представления, изменилось ли имя переменной во время выполнения и теперь называется 'x'.

Что-то, что вы могли бы попытаться сделать, это позволить вашей программе динамически скомпилировать некоторый код, но это, вероятно, не правильное решение вашей проблемы. Если вы лучше объясните, что вам нужно, мы могли бы предоставить вам эффективное решение.

Надеюсь, это помогло

РЕДАКТИРОВАТЬ: Просматривая ваши издания, я могу вам сказать, что это невозможно с подходом, который вы используете в настоящее время. Я мог бы предложить вам следующее:

int i = 0;
List<ArrayList> masterList = new List<ArrayList>();
foreach (something)
{
     masterList.Add(new ArrayList());
     i++;
}

Если вам нужно, чтобы у каждого ArrayList было определенное имя, которое вы можете вспомнить, вы можете использовать словарь:

int i = 0;
Dictionary<string, ArrayList> masterList = new Dictionary<string, ArrayList>();
foreach (something)
{
     masterList.Add("oArr" + i.ToString(), new ArrayList());
     i++;
}
ArrayList al = masterList["oArr1"];
4 голосов
/ 01 июля 2010

Будет ли это работать для вас?

var arrayLists = new List<ArrayList>();
var i = 0;
foreach(var item in list)
{
    arrayLists.Add(new ArrayList());
    i++;
}

Затем вы можете получить доступ к каждому списку массивов по индексу.

1 голос
/ 01 июля 2010

Использовать список ArrayLists.

...