1

我们这里有这个类:

public static class Helper
{
    private static readonly Random Random = new Random();
    public static int GetRandomId()
    {
        return Random.Next(int.MinValue, 0);
    }
}

在某些时候调用.GetRandomIdHelper我们相同的整数 - 为什么以及如何避免/解决这个问题?

注意:
该字段Random是一个单例实例,并且此行为不会在循环中发生(实际上,调用之间的时间甚至无关紧要)。

更具体地说:
在某些时候,随机机器只返回一个值,而不管调用的数量是多少!这与可能性、唯一性无关...... - 我认为我(通过这个实现)破坏了我的随机实例......怎么会?

4

2 回答 2

4

Next 方法返回一个介于 int.MinValue 和 0 之间的伪随机数。它不保证这些数字是唯一的。如果您调用 Random.Next(0,10) 11 次,您认为会发生什么?

为防止重复,您需要跟踪已发布的 ID。

或者,是否需要以随机顺序排列 ID?您可以只使用递增的 int 来生成 Id 吗?

于 2012-04-10T06:04:39.997 回答
1

好吧,它是随机的,它不记得过去做了什么。

保留一份已经给出的数字列表,并在返回之前检查它是否还没有给出。

更多关于为什么它比你想象的更频繁地重复的细节可以在这里找到:http ://csharpindepth.com/Articles/Chapter12/Random.aspx

于 2012-04-10T05:58:54.487 回答