c#在for循环中创建对象的新实例
本文关键字:新实例 实例 创建对象 for 循环 | 更新日期: 2023-09-27 17:50:28
我试图在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;
}
您没有播种您的随机生成器。您应该在对next:
的所有调用中共享相同的随机实例。var randomGenerator = new Random(DateTime.Now.Milliseconds);
然后,只调用一个生成器:
dp.x = randomGenerator.Next(0000, 9999);
dp.y = randomGenerator.Next(0000, 9999);
这样,您都为生成器提供了一些东西,并且每次调用next都应该生成一个新的"随机"数字。
System.Random(): From MSDN
类的新实例随机类,使用时间依赖默认种子值
没有调试器,你太快了。
试试这个:
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;
}
在每次迭代中实例化一个新的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;
}
将新的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;
}