C# правильные значения отображаются только во время отладки

У меня есть приложение на C# (.NET), которое реализует генетический алгоритм.

Он имеет класс Population с массивом Individuals (другой класс), который также имеет массив объектов Genes. Проблема заключается в том, что при печати содержимого массива Population он не отображает правильные значения, если я не отлаживаю конструктор класса Individual. Без отладки массив Population заполняется тем же первым отдельным объектом для всего его размера. Я ничего не делал, кроме размещения точек останова, и он отображает правильные значения.

Конструктор населения:

        public Population(int populationSize, bool initial,int noOfReq)
    {
        population = new Individual[populationSize];
        if (initial)
        {
            for (int i = 0; i < populationSize; i++)
            {
                Individual ind = new Individual(noOfReq,true);
                population[i] = ind;
            }
        }
    }

Индивидуальный конструктор

public Individual(int noOfReq, bool initial)
    {
        req = new Gene[noOfReq];
        if (initial)
        { 
        Random rand = new Random();

            //Randomly assign the Req to a value between 0 and 2
            for (int gene = 0; gene < noOfReq; gene++)
        {
            Gene newGene = new Gene();
            req[gene] = newGene;
            req[gene].name = "R" + gene;
            req[gene].cost = rand.Next(1, 10);
            int r = rand.Next(3);
            req[gene].value= r;
        }//if initial
    }

Как решить эту проблему?

Замечания:

  • Запуск приложения без точек останова -> содержимое массива Population неверно.
  • Установка точек останова в конструкторе Individual, затем запуск приложения -> отображение правильных значений.
  • я использую Random rand = new Random(); int r = rand.Next(3); заполнить объект Gene у каждого элемента в массиве Individual.

0 ответов

Другие вопросы по тегам