【发布时间】:2014-05-07 21:25:33
【问题描述】:
我知道这个问题已被多次提出,但没有一个对我有用。
首先我在我的名为RandomNumGenerator(items)的方法中这样做了
List<int> randNum = new List<int>();
foreach (var item in items)
{
randNum.Add(new Random(1000).Next());
}
这总是给我相同的号码,然后在查看this answer 之后,我这样做了:
Random rnd = new Random(1000);
foreach (var item in items)
{
randNum.Add(rnd.Next());
}
这给了我如下数字
325467165
506683626
1623525913
2344573
1485571032
虽然这对于循环的每次迭代都很好,但这里的问题是,当我停止并重新运行应用程序时,我会再次得到与之前相同的数字。
325467165
506683626
1623525913
2344573
1485571032
这种行为仅在调试期间出现,还是每次我调用 RandomNumGenerator 时都会遇到同样的问题?
【问题讨论】:
-
我建议你在类中声明
rnd为static readonly并重用同一个实例。 -
这里有很多好的答案,因此很难选择正确的答案。我对 Neel 和 Tim Schmelter 给出的答案意见不一。虽然蒂姆的回答确实解决了我的问题,但尼尔斯的回答为我提供了解决未来可能出现的问题的方法。
-
您正在为生成器播种相同的编号。省略该参数,它将从时钟派生一个种子。
-
现在与问题无关,但请使用实际编译的代码以供将来使用。据我们所知,如果您不向我们展示为您提供结果的代码,问题可能出在任何地方。
-
这个问题之前已经被问过很多次了。除了 OP 明显的混乱之外,我看不出这个实例有什么不同。