Как я могу создать последовательность пронумерованных переменных во время выполнения?
Друзья, я должен создать серию ArrayList
s, каждый из которых содержит объекты неизвестного происхождения, причем каждый экземпляр назначается отдельной локальной переменной.
Пока все хорошо... Но мне также нужно, чтобы имя каждой локальной переменной следовало очень специфическому шаблону: имя должно начинаться с "oArr", за которым следуют одна или несколько цифр, отражающих позицию этого конкретного массива в последовательности. Кроме того, я не буду знать во время компиляции, сколько из этих массивов - и, следовательно, сколько локальных переменных - мне понадобится!
Мне кажется, что это, возможно, проблема, которая может быть решена с помощью доступности динамических типов в C# 4.0, однако я совсем не знаком с их использованием. Как я могу взять код, как это...
int i=0;
foreach(something)
{
ArrayList oArr+i=new ArrayList();
i++;
}
... и превратить его в нечто, что соответствует критериям, изложенным выше, и на самом деле компилируется?
С другой стороны, есть ли более простой, здравый подход к этой проблеме?
3 ответа
Вы не можете изменить имя переменной во время выполнения, так как код (даже код 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"];
Будет ли это работать для вас?
var arrayLists = new List<ArrayList>();
var i = 0;
foreach(var item in list)
{
arrayLists.Add(new ArrayList());
i++;
}
Затем вы можете получить доступ к каждому списку массивов по индексу.