1

Возникла дилемма! Нужно чтобы объекты (типа Garen, Lux) создавались автоматически и при создание объектов, имена будут присваиваться строке как цифры 1.2.3 и т.д (вместо Garen: 1, вместо Lux: 2 и т.д) и затем попадать в список heroes и так же рандомно присваивать эти 3 значения (name, hClass, hp) созданным объектам 1 и 2(Garen, Lux)

class Program
{
    static void Main(string[] args)
    {
        List<heroes> heroes = new List<heroes>();

        Heroes Garen = new Heroes();
        Heroes Lux = new Heroes();

        Garen.name = "Garen";
        Garen.hClass = "Tank";
        Garen.hp = 500;

        Lux.name = "Lux";
        Lux.hClass = "supp";
        Lux.hp = 300;

        heroes.Add(Garen);
        heroes.Add(Lux);



        Console.WriteLine(heroes[1].name);
        Console.ReadKey(); 
    }
}
kross
  • 55
  • А в чем проблема? Берете в цикле создаете объекты и сохраняете, например, в массив. Что именно не получается? – Ella S. Mar 16 '16 at 20:00
  • @EllaSvetlaya - может быть товарищ никогда не видел циклов и списков –  Mar 16 '16 at 20:02
  • не получается следующее чтобы создать объект я пишу: класс имяОбъекта =new класс, а как мне записать в имя объекта переменную? чтобы она постоянно менялась например n = 0; и затем n ++, если я напишу класс n =new класс, он создаcт объект n, а потом начнет ругаться что n не может быть числом так как это имя объекта – kross Mar 16 '16 at 20:29
  • @kross Извращение какое-то. Создавайте массив ObjectType[] array = new ObjectType[100]. Потом в цикле array[i] = new ObjectType(...). Тогда i-ый объект имеет имя array[i]. Или у вас разные типы? Или обязательно разные имена типа объект1/2/... хотите (хотя где такое может понадобиться - страшно даже представить) – Алексей Саровский Mar 16 '16 at 20:40
  • приведите код класса, объекты которого нужно создавать, интересуют объявленные свойства и конструкторы, остальное не столь важно. И пожалуйста, уберите приветствие из вопроса, тут это не принято http://ru.stackoverflow.com/help/behavior – rdorn Mar 16 '16 at 20:52
  • @rdorn ТС хочет в цикле динамически наделать переменных с новыми именами - именами переменных как элементов исходного кода –  Mar 16 '16 at 21:10
  • я для себя эту задачку решаю так как нуб в программировании и стараюсь себе придумывать задачи, в общем я попробую поколдовать с тем что вы посоветовали и отпишусь что из этого получилось, а применение банальное, задачка из лол, там персонажи рандомно каждую неделю выставляют и часто получается так что повторяются, вот и хочу создать объекты якобы персонажи с пусть будет по 3 индивидуальных парамерта у каждого запихнуть их в массив и потом сделать сортировку с рандомным выпадом персонажей по 5 например с условием чтобы не повторялись персонажи пока не выпадут все, както так) – kross Mar 16 '16 at 21:28
  • @Igor возможно просто не смог сформулировать правильно. Т.к. ваше предположение реализовать конечно можно, кодогенерацию и компиляцию налету ни кто не запрещал, но это явно не уровень новичка – rdorn Mar 16 '16 at 21:35
  • @kross возьмите лучше задачник Шеня, если только начинаете учиться, пользы будет куда больше. – rdorn Mar 16 '16 at 21:38
  • в одной мудрой поговорке говорится тяжело в учении легко в бою) пусть помучаюсь но буду уже знать что и как – kross Mar 16 '16 at 21:47
  • @kross Вообще на с++ макросами это сделать очень легко, на шарпе - явно сложнее – Алексей Саровский Mar 16 '16 at 21:53
  • Вот здесь посмотрите, как раз Ваш случай: http://www.cyberforum.ru/csharp-net/thread184351.html – Ella S. Mar 17 '16 at 06:46

1 Answers1

3

Думаю что для вашей задачи будет вполне достаточно такого фрагмента:

List<heroes> heroes = new List<heroes>();
List<string> heroNames;//заполняем заранее
List<string> heroClasses;//заполняем заранее  
int minHp = <минимально допустимое значение>;
int maxHp = <максимально допустимое значение>;

Random rnd = new Random();

for (int i = 0; i < NumHeros; i++)
{
    Heroes newHero = new Heroes();
    newHero.name = heroNames[rnd.Next(heroNames.Length)];
    newHero.hClass = heroClasses[rnd.Next(heroClasses.Length)];
    newHero.hp = rnd.Next(minHp, maxHp);
    heroes.Add(newHero);
}

Для создания большого количества объектов, вовсе не обязательно, для каждого объекта заводить отдельную переменную, достаточно одной, в которой вы будете создавать новые объекты, выполнять их конфигурацию и добавлять в List. В дальнейшем к любому объекту в списке, можно получить доступ по индексу.

Имена можно генерировать и "налету", тогда надо просто заменить выбор рандомного имени из списка на функцию генерации имен.

Также, настоятельно рекомендую ознакомиться со списком литературы для самостоятельного изучения языка и платформы тут.

rdorn
  • 16,323