Foreach使用随机数据生成循环C#中的List <t> </t>

时间:2015-04-14 13:06:00

标签: c# winforms visual-studio-2012

我有一个基于C#自定义类的列表,我试图使用foreach循环来选择索引中的每个项目并使用 Random ,随机生成 INT 对于每个项目。

但是,foreach循环中的每个项目都会更改为相同的值。有没有改变这个?

这是我的自定义列表:

List<patient> p = new List<patient>();

这就是我在列表中添加项目的方式:

p.Add(new patient(pname, pdob, ploc));

这是在system.timers事件中运行的foreach循环。

foreach(patient ps in p)
{
    ps.ploc = new Random().Next(80, 220);
}

示例输出将是所有项目都具有 120 的plocation(ploc),而不是每个项目都有自己的随机。

非常感谢任何解决方案。

3 个答案:

答案 0 :(得分:2)

尝试以下操作,您将为每位患者创建一个具有相同种子的新随机,从而获得相同的#34;随机&#34;调用Next()时的数字

var rnd = new Random();
foreach(patient ps in p)
{
    ps.ploc = rnd.Next(80, 220);
}

答案 1 :(得分:2)

在foreach之外初始化随机

Random random = new Random();
foreach(patient ps in p)
{
    ps.ploc = random.Next(80, 220);
}

答案 2 :(得分:2)

问题是你在每次迭代中使用相同的种子生成Random的新实例;因此在每次调用中返回相同的结果。将循环更改为以下代码。

var iRandom = new Random();
foreach(patient ps in p)
{
    ps.ploc = iRandom.Next(80, 220);
}