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);
}
我有一个基于 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);
}