シード値が役立つかどうかは、何をしようとしているのかによって異なります!
をシードとして使用DateTime.Now.Ticks & 0xFFFF
しています。つまり、(i)現在の時刻に基づいてシードを作成し、(ii)そのシードを 0 ~ 65535 の値に制限しています。一般に、これらはどちらも特に良いアイデア。システム クロックの粒度は約 15 ミリ秒 (iirc) であるため、同じ 15 ミリ秒の「セグメント」内でメソッドを呼び出すと、同じシードが使用されます。
Random
明示的なシードをコンストラクターに渡さない場合はEnvironment.TickCount & 0x7FFFFFFF
、シードとして効果的に使用されます。そのため、現在の時刻に基づいたままになりますが、カスタム シードよりもはるかに広い範囲 (0 ~ 2147483647) になります。
コンストラクターのドキュメントRandom(Int32)
から...
異なるオブジェクトに同一のシード値を提供すると、Random
各インスタンスは同一の乱数シーケンスを生成します。
コンストラクターのドキュメントRandom()
から...
デフォルトのシード値はシステム クロックから派生し、有限の分解能を持ちます。その結果、Random
既定のコンストラクターの呼び出しによって連続して作成されるさまざまなオブジェクトは、同じ既定のシード値を持つため、同じ乱数のセットが生成されます。この問題は、単一のRandom
オブジェクトを使用してすべての乱数を生成することで回避できます。