2010-07-01 6 views
-3

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

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

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

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

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

Альтернативно, существует ли более простой, разумный подход к этой проблеме?

+5

Вы не предоставили достаточную информацию для нас, чтобы помочь вам. – ChaosPandion

+4

Что вы пытаетесь достичь, изменив имя переменной? –

+3

Ах, старый шаблон «неопровержимая переменная»! Помните, что многие решения этого результата приводят к предсказуемым именам переменных, позволяя опытным клиентам ссылаться на переменную с помощью переменной, которая содержит переменное имя переменной переменной ... Чтобы избежать этого, используйте либо надежный внешний источник истинных случайных значений, либо чтобы клиенты использовали переменные имена переменных для переменных, содержащих их переменные значения переменных переменных. – Shog9

ответ

6

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

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

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

Надеется, что это помогло

EDIT: Видя ваши издания, я могу вам сказать, что это невозможно с подходом вы используете. Я мог бы предложить вам следующее:

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

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

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

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