私は Google で RNGCryptoServiceProvider を検索して、Max と Min の間の範囲を制限し、均等な分布を得る方法の例を示しました。モジュロ演算子を使用する前に、奇妙な値 (最大値を超える) を取得することがあります... とにかく、このコード (不明のクレジット) は、メソッドが呼び出されるたびに、RNGCCryptoServiceProvider からの新しいシードでランダムにシードします。皆さんはどう思いますか?
public static int GetRandom(int min, int max)
{
byte[] b = new byte[sizeof(int)];
new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
int i = BitConverter.ToInt32(b, 0);
Random r = new Random(i);
return r.Next(min, max);
}