我有一个基于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),而不是每个项目都有自己的随机。
非常感谢任何解决方案。
答案 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);
}