私は最近、メンバー@dtbによって編集されたここでの質問に答えました。
質問にはRandom()の使用が含まれ、メンバーはこの一般的な落とし穴を回避するために私の回答を編集したと述べました(彼が言ったように)
私の元のコードは、次のように、この問題に対して単独で脆弱ではありませんでした。
public void DoStuff()
{
var rand = new Random();
while() {} //Inner loop that uses 'rand'
}
答えは編集されました。意図はループ内で関数を呼び出すことであるように見えたため、コードが脆弱になりますが、基本的に次のように変更されました。
public void DoStuff(Random R)
{
while() {} //Inner loop that uses 'rand'
}
私の当面の考えは、ランダムインスタンスをスタックのさらに上に維持する負担を押し上げただけであり、問題のプログラマーがそれがどのように実装されているかを理解していない場合でも、この落とし穴に陥ります。
私の質問は、.NetのRandom()がJavascriptの場合と同じように実装されていないのはなぜですか?1つの静的なグローバルRandom()(たとえば、AppDomainごとに?)ですか?当然のことながら、シードを制御する必要がある非常にまれなケースでは、現在の時刻をシードとして使用する、より明示的なオーバーロード/メソッドを提供することもできます。
確かに、これはこの非常に一般的な落とし穴を回避するでしょう。誰かが.Netアプローチの利点について私に教えてもらえますか?
編集:シードを制御することが重要であることを理解していますが、デフォルトでこれを強制することは奇妙な選択のようです。誰かがシードを制御したい場合、彼らは自分が何をしているのかを知っている可能性があります。
乾杯。