Я использовал RNGCryptoServiceProvider
для создания случайного целого числа. Это сгенерирует случайное целое число между нижней и верхней границами целого числа.
private static RNGCryptoServiceProvider rngCryptoServiceProvider = new RNGCryptoServiceProvider();
public int Execute(int lowerBound, int upperBound)
{
// initialize an array of bytes equal to the number of bytes in an integer
var numberOfBytes = sizeof(int);
var bytes = new byte[numberOfBytes];
// fill the array with random bytes
rngCryptoServiceProvider.GetBytes(bytes);
// convert the byte array to an integer
var bitsAsInteger = BitConverter.ToInt32(bytes, 0);
return bitsAsInteger;
}
Теперь я хочу сгенерировать случайное целое число между двумя целыми числами. Судя по тому, что я прочитал, это нетривиальная задача. Итак, я подумал, что могу случайным образом засеять класс System.Random
и использовать функциональность Next()
для вычислений. Это разумный подход?
private static RNGCryptoServiceProvider rngCryptoServiceProvider = new RNGCryptoServiceProvider();
public int Execute(int lowerBound, int upperBound)
{
// initialize an array of bytes equal to the number of bytes in an integer
var numberOfBytes = sizeof(int);
var bytes = new byte[numberOfBytes];
// fill the array with random bytes
rngCryptoServiceProvider.GetBytes(bytes);
// convert the byte array to an integer
var bitsAsInteger = BitConverter.ToInt32(bytes, 0);
// use the random integer to seed the non cryptographically secure Random class
var random = new System.Random(bitsAsInteger);
// use the Next() functionality to do the math to get a random number between two values
var randomInteger = random.Next(lowerBound, upperBound);
return randomInteger;
}
Есть ли другой способ достичь того же результата без использования System.Random
?