Foreach 在 C# 中循环一个 List<T> 并生成随机数据

Foreach loop a List<T> in C# with random data generation

我有一个基于 C# 中的自定义 class 的列表,我正在尝试使用 foreach 循环 select 索引中的每个项目并使用 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);
}

示例输出是所有项目的位置 (ploc) 为 120,而不是每个项目都有自己的随机数。

任何解决方案将不胜感激。

尝试以下操作,您正在为每位患者创建一个具有相同种子的新随机数,从而在调用 Next()

时获得相同的 "random" 数字
var rnd = new Random();
foreach(patient ps in p)
{
    ps.ploc = rnd.Next(80, 220);
}

在 foreach 之外初始化 Random

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

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

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