我们这里有这个课程:
public static class Helper
{
private static readonly Random Random = new Random();
public static int GetRandomId()
{
return Random.Next(int.MinValue, 0);
}
}
在某些时候调用.GetRandomId
的{{1}}会给我们相同的整数 - 为什么以及如何避免/修复此问题?
注意:
字段Helper
是一个单例实例,并且这种行为不会在循环中发生(实际上它甚至不会在调用之间有多长时间)。
更具体:
在某些时候,随机机器只返回一个值,无论调用量多少!这不是关于可能性,独特性...... - 我认为我(有了这个实现)打破了我的随机实例......怎么来的?
答案 0 :(得分:4)
Next方法返回int.MinValue和0之间的伪随机数。它不保证数字是唯一的。如果你将Random.Next(0,10)调用11次,你认为会发生什么?
为防止重复,您需要跟踪已发出的ID。
或者,是否需要Ids以随机顺序?你能用一个递增的int来生成Ids吗?
答案 1 :(得分:1)
它是随机的,它不记得它过去做了什么。
保留已经给出的数字列表,并在返回之前检查它是否已经给出。
有关为什么它也会比您预期的更频繁重复的更多细节可以在这里找到:http://csharpindepth.com/Articles/Chapter12/Random.aspx