-3

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

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

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

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

...并将其变成符合上述标准实际编译的东西?

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

4

3 回答 3

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"];
于 2010-07-01T05:07:09.367 回答
4

这对你有用吗?

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

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

于 2010-07-01T05:14:45.143 回答
1

使用 ArrayLists 的列表。

于 2010-07-01T05:17:02.127 回答