1

ここにこのクラスがあります:

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

ある時点で を呼び出すと同じ整数.GetRandomIdHelper得られます - なぜ、どのようにこれを回避/修正するのですか?

注:
フィールドRandomはシングルトン インスタンスであり、この動作はループでは発生しません (実際には、呼び出しの間にどれだけの時間があるかは問題ではありません)。

さらに具体的に言うと
、ある時点で、呼び出しの量に関係なく、ランダムマシンは 1 つの値のみを返します! 可能性、一意性についてではありません...-(この実装で)ランダムインスタンスを壊したと思います...どうしてですか?

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 に答える