朋友们,我必须创建一系列ArrayList
个,每个都包含未知来源的对象,每个实例都分配给一个单独的局部变量。
到目前为止,这么好......但我还需要每个局部变量的名称遵循一个非常具体的模式:名称应以“oArr”开头,后跟一个或多个数字反映特定数组在序列中的位置。此外,我不会在编译时知道有多少这些数组 - 因此,我需要多少局部变量!
这让我觉得这可能是一个问题,可以通过C#4.0中动态类型的可用性来解决,但我对它们的使用并不熟悉。我怎么能拿这样的代码......
int i=0;
foreach(something)
{
ArrayList oArr+i=new ArrayList();
i++;
}
...并将其转换为符合上述标准和实际编译的内容?
或者,对这个问题有更简单明智的方法吗?
答案 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列表。