c # создание новых экземпляров объекта в цикле for - PullRequest
3 голосов
/ 19 апреля 2011

Я пытаюсь создать новый экземпляр пользовательского объекта в цикле for, если я добавлю точку останова, я смогу увидеть изменение объекта и свойств и он вернет x количество РАЗЛИЧНЫХ объектов-свечей.Однако, если я удалю точку останова, все объекты, возвращенные в списке, будут одинаковыми.Есть идеи?

Спасибо

    public List<candle> Getcandles(int can)
    {
        List<candle> dpl = new List<candle>();

        for (int i = 0; i < can; i++)
        {
            candle dp = new candle();
            dp.x = new Random().Next(0000, 9999);
            dp.y = new Random().Next(0000, 9999);              
            dpl.Add(dp);                

        }

        return dpl;

    }

Ответы [ 4 ]

7 голосов
/ 19 апреля 2011

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

var randomGenerator = new Random(DateTime.Now.Milliseconds);

Затем просто вызовите один генератор:

dp.x = randomGenerator.Next(0000, 9999);
dp.y = randomGenerator.Next(0000, 9999);

Таким образом, вы оба что-то сеяли в генератор, и каждый следующий вызов должен генерировать новое «случайное» число.

1 голос
/ 19 апреля 2011

System.Random (): из MSDN

Инициализирует новый экземпляр класса Random, используя зависящее от времени начальное значение по умолчанию

без отладчика, который выслишком быстро.

попробуйте это:

public List<candle> Getcandles(int can)
{
    List<candle> dpl = new List<candle>();
    var rnd = new Random(DateTime.Now.Milliseconds);
    for (int i = 0; i < can; i++)
    {
        candle dp = new candle();
        dp.x = rnd.Next(0000, 9999);
        dp.y = rnd.Next(0000, 9999);              
        dpl.Add(dp);                

    }

    return dpl;

}
0 голосов
/ 19 апреля 2011

Возьмите новый Random () вне цикла for.

    public List<candle> Getcandles(int can)
    {
        List<candle> dpl = new List<candle>();
        var random =new Random() 

        for (int i = 0; i < can; i++)
        {
            candle dp = new candle();
            dp.x = random .Next(0000, 9999);
            dp.y = random .Next(0000, 9999);              
            dpl.Add(dp);                

        }

        return dpl;

    }
0 голосов
/ 19 апреля 2011

Ваше создание нового Random () на каждой итерации. Поскольку цикл идет так быстро, каждый объект Random () в основном начинается с одного и того же значения, которое дает одинаковые результаты.

Измените свой код на что-то вроде:

public List<candle> Getcandles(int can)     {
     List<candle> dpl = new List<candle>();
      Random generator = new Random();

      for (int i = 0; i < can; i++)         {
         candle dp = new candle();
         dp.x = generator.Next(0000, 9999);
         dp.y = generator.Next(0000, 9999);
         dpl.Add(dp);
       }
      return dpl;
  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...