是否可以实例化具有变量名称的对象,或者在运行时访问变量名称?

时间:2011-10-24 18:48:42

标签: c# for-loop runtime

我有很多代码行创建对象并使用具有类似对象名称和构造函数的各种参数。唯一要改变的是正在创建的对象变量的实际名称,以及传入的对象本身的名称。以下是与我当前设置匹配的代码示例:

BackyardObject backyardObject0 = new BackyardObject(cat0, dog0, goat0, piglet0);
BackyardObject backyardObject1 = new BackyardObject(cat1, dog1, goat1, piglet1);
BackyardObject backyardObject2 = new BackyardObject(cat2, dog2, goat2, piglet2);
BackyardObject backyardObject3 = new BackyardObject(cat3, dog3, goat3, piglet3);
BackyardObject backyardObject4 = new BackyardObject(cat4, dog4, goat4, piglet4);
// many many more BackyardObjects being instantiated

正如我们所看到的,正在创建的对象的名称与传递给构造函数的对象的名称完全匹配。是否有可能创建一个可以设置所有这一切的循环?

修改

我想我可能缺乏为这个问题得到正确答案所需的细节。这不是关于“如何”使用循环的问题,或者如何将项目添加到集合中更多的问题是确定是否可以在循环内动态创建“变量名称”,同时访问另一个变量名称动态地在循环内部提供了上面给出的信息(只是在现场编写代码)。

// psuedo code for something I'm asking is possible
for( i = 0; i < 10; i++)
{
    // create BackyardObject with generic name, while appending "i" to 
    // variable name, and accessing other object variables
    BackyardObject backyardObject'i' 
        = new backyardObject(cat'i', dog'i', goat'i', piglet'i');
}

虽然我知道我可以创建额外的数组和列表来存储对象然后使用它们,但我只是看到是否可以动态获取变量名称。我不确定这是否完全可能,这就是我问这个问题的原因。我知道这是一个奇怪的问题,但在看到这个Objective-C代码之后感到好奇:

// Getting an arrayName dynamically based on loop index
for (int i = 0; i < 10; i++)
{
    NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",
        i];
    NSArray *array = [self valueForKey:arrayName];
}

1 个答案:

答案 0 :(得分:7)

对象没有名称......你所说的是变量。而不是使用数字作为后缀的许多变量,你最好使用集合 - 数组,或列表,或其他什么。然后你可以这样做:

// Or use arrays...
List<Cat> cats = new List<Cat>();
cats.Add(new Cat(...)); // Add the cats however you want to set them up
// Ditto dogs, goats etc

List<BackyardObject> backyardObjects = new List<BackyardObject>();
for (int i = 0; i < 10; i++)
{
    backyardObjects.Add(new BackyardObject(cats[i], dogs[i],
                                           goats[i], piglets[i]));
}

我认为你是C#的新手 - 我建议你看看你正在学习的任何数组和集合。