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

Sun*_*i86 -3 c# dynamic-typing dynamic-keyword c#-4.0

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

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

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

int i=0;
foreach(something)
{
    ArrayList oArr+i=new ArrayList();
    i++;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Car*_* G. 6

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

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

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

希望这有帮助

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

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

如果您需要的是让每个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"];
Run Code Online (Sandbox Code Playgroud)