如何在运行时创建一系列编号变量?

朋友们,我必须创建一系列ArrayList ,每个包含未知来源的对象 ,每个实例都分配给一个单独的局部变量。

到目前为止,这么好……但我还需要每个局部变量的名称遵循一个非常具体的模式:名称应以“oArr”开头,后跟一个或多个数字反映特定数组在序列中的位置。 此外,我不会在编译时知道有多少这些数组 – 因此,我需要多少局部变量!

令我感到震惊的是,这可能是一个问题,可以通过C#4.0中动态类型的可用性来解决,但我对它们的使用并不熟悉。 我怎么能拿这样的代码……

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

…并将其转换为符合上述标准实际编译的内容?

或者,是否有一个更简单,理智的方法来解决这个问题?

您无法在执行期间更改变量的名称,因为代码(甚至是c#代码)是使用特定变量名编译的。 如果您可以在执行期间更改名称,则会导致问题。

例如,如果允许更改变量名的语言,那么当您尝试访问名为“var1”的变量时,编译器不知道在执行期间变量名称是否已更改,现在称为“x”。

您可以尝试做的是允许您的程序动态编译一些代码,但这可能不是您的问题的正确解决方案。 如果您更好地解释您的需求,我们可以为您提供有效的解决方案。

希望这有帮助

编辑:看到您的版本我可以告诉您,使用您当前使用的方法是不可能的。 我可以建议你以下:

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

如果您需要让每个ArrayList具有特定名称,您可以回想起您可以使用字典:

 int i = 0; Dictionary masterList = new Dictionary(); foreach (something) { masterList.Add("oArr" + i.ToString(), new ArrayList()); i++; } ArrayList al = masterList["oArr1"]; 

这对你有用吗?

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

然后,您可以按索引访问每个数组列表。

使用ArrayLists列表。