スレッド静的シードを使用して、数値の範囲から乱数を生成するにはどうすればよいですか?
複数の方法から範囲内の乱数を作成する必要があります。問題は同じ古い重複です。
素敵なランダム ジェネレーターがある MSDN ブログを見つけましたが、2 つの値 (通常は 0 ~ 100) の間の範囲が必要です。
http://blogs.msdn.com/b/pfxteam/archive/2009/02/19/9434171.aspx
public static class RandomGenNumber
{
private static RNGCryptoServiceProvider _global =
new RNGCryptoServiceProvider();
[ThreadStatic]
private static Random _local;
//this works
public static int Next()
{
Random inst = _local;
if (inst == null)
{
byte[] buffer = new byte[4];
_global.GetBytes(buffer);
_local = inst = new Random(
BitConverter.ToInt32(buffer, 0));
}
return inst.Next();
}
//this is what needs to be fixed
public static int Next(int low, int high)
{
Random inst = _local;
if (inst == null)
{
byte[] buffer = ????;
_global.GetBytes(buffer);
_local = inst = new Random(
BitConverter.ToInt32(buffer, 0));
}
return inst.Next();
}
}
ループするとき、範囲を渡したい
//this is called on a loop and I want to avoid duplicates
internal ExampleMember PopulateMember()
{
var member = new ExampleMember();
member.gender = RandomGenNumber.Next(0, 100) < 42 ? "M" : "F";
member.personalityTypeId = RandomGenNumber.Next(1, 45);
member.age = RandomGenNumber.Next(20, 80);
...
ここで何十もの投稿を読みましたが、範囲の例が見つかりませんでした.
数値を生成するバイトの方法は素晴らしくきれいに見えますが、範囲に対して機能させることはできません。Ints または double を渡して乗算する必要がありますか? または、開始範囲と終了範囲を持つ Next のオーバーロードで、そのバッファー値をどのように使用できますか?