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

时间:2010-07-01 05:01:09

标签: c# c#-4.0 dynamic-typing dynamic-keyword

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

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

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

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

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

或者,对这个问题有更简单明智的方法吗?

3 个答案:

答案 0 :(得分:6)

您无法在执行期间更改变量的名称,因为代码(甚至是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"];

答案 1 :(得分:4)

这对你有用吗?

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

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

答案 2 :(得分:1)

使用ArrayLists列表。

相关问题