Можно ли создавать экземпляры объектов с именами переменных или обращаться к именам переменных во время выполнения? - PullRequest
0 голосов
/ 24 октября 2011

У меня довольно много строк кода, которые создают объекты и используют различные параметры с одинаковыми именами объектов и конструкторами.Единственное, что меняется, - это фактическое имя создаваемой переменной объекта и имя самих передаваемых объектов. Вот пример кода, который соответствует моей текущей настройке:

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 Ответ

7 голосов
/ 24 октября 2011

Объекты не имеют имен ... вы говорите о переменных .И вместо того, чтобы иметь множество переменных с числами в качестве суффиксов, лучше использовать collection - массивы, списки или что-то еще.Затем вы можете сделать:

// 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 # - я предлагаю вам взглянуть на массивы и коллекции в том, что вы изучаете.

...