如何在C#中生成一个随机int数?

如何在C#中生成一个随机整数?


Random类用于创建随机数。 (当然是伪随机)。

例:

Random rnd = new Random();
int month = rnd.Next(1, 13); // creates a number between 1 and 12
int dice = rnd.Next(1, 7);   // creates a number between 1 and 6
int card = rnd.Next(52);     // creates a number between 0 and 51

如果你要创建多个随机数,你应该保留Random实例并重用它。 如果你创建新实例的时间太近,它们将产生相同的一系列随机数,因为随机发生器从系统时钟中播种。


每次你做新的随机()它被初始化。 这意味着在一个紧密的循环中,您可以获得相同的价值。 您应该保留一个Random实例,并在同一个实例上继续使用Next。

//Function to get random number
private static readonly Random getrandom = new Random();

public static int GetRandomNumber(int min, int max)
{
    lock(getrandom) // synchronize
    {
        return getrandom.Next(min, max);
    }
}

这个问题看起来很简单,但答案有点复杂。 如果您几乎看到每个人都建议使用Random类,并且有人建议使用RNG加密类。 但那么什么时候选择。

为此,我们需要首先理解术语随机及其背后的哲学。

我鼓励你使用C#https://www.youtube.com/watch?v=tCYxc-2-3fY观看这部深入了解RANDOMNESS理念的视频

首先让我们理解RANDOMNESS的理念。 当我们告诉一个人在红色,绿色和黄色之间进行选择时,内部会发生什么。 是什么让一个人选择红色或黄色或绿色?

一些初步的想法进入了决定他选择的人的思想,它可以是喜欢的颜色,幸运的颜色等等。 换句话说,我们在RANDOM中称为SEED的一些初始触发器。这个SEED是一个起点,触发器指示他选择RANDOM值。

现在,如果SEED容易被猜出,那么这些随机数被称为PSEUDO,并且当一个种子难以猜到时,那些随机数被称为SECURED随机数。

例如,一个人选择的颜色取决于天气和声音的组合,那么很难猜出最初的种子。

现在让我作一个重要的声明:

*“随机”类仅生成PSEUDO随机数并生成SECURE随机数,我们需要使用“RNGCryptoServiceProvider”类。

c#随机

随机类从您的CPU时钟中获取非常可预测的种子值。 换句话说,C#的RANDOM类生成伪随机数,下面是相同的代码。

Random rnd= new Random();
int rndnumber = rnd.Next()

RNGCryptoServiceProvider类使用OS熵来生成种子。 OS熵是一个随机值,它是使用声音,鼠标点击和键盘计时,热温度等产生的。以下代码为相同。

using (RNGCryptoServiceProvider rg = new RNGCryptoServiceProvider()) 
{ 
  byte[] rno = new byte[5];    
  rg.GetBytes(rno);    
  int randomvalue = BitConverter.ToInt32(rno, 0); 
}

要了解OS熵,请参阅此视频https://www.youtube.com/watch?v=tCYxc-2-3fY从11:20开始说明OS熵的逻辑。 因此,用简单的词语RNG Crypto生成SECURE随机数字。

链接地址: http://www.djcxy.com/p/2921.html

上一篇: How do I generate a random int number in C#?

下一篇: Generating random whole numbers in JavaScript in a specific range?