如何在C#中生成随机数

随机数广泛用于数字游戏、统计取样、密码学、统计物理学的计算、数值分析、无线电通信和轮盘等赌场游戏。

我们可以使用Random 类来生成C#中的随机数

什么是C# Random 类?

C# Random 类是一个伪随机数生成器,它是一种算法,可以生成符合某些随机性统计要求的数字序列。

这个类有5个方法Next(),NextInt64(),NextBytes(),NextDouble()NextSingle()

根据数字的类型,即intlong 等,我们可以使用相应的方法。

让我们通过这些例子来进一步了解它。

在C#中生成随机整数

在C#中生成随机整数的步骤

1.实例化随机数类。 2.使用Random.Next() 方法来返回Int32.MinValueInt32.MaxValue 之间的随机整数。


var randomInteger = new Random();

randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next();
randomInteger.Next(); 


/* OUTPUT : 
2027076668
1095111085
535874255
1973884472
430547700
*/

生成最小值和最大值之间的随机整数

Random.Next() 有一个重载方法,它接受最小值和最大值作为参数,在给定值之间生成一个随机的整数。

要生成100到1000之间的随机数,请使用下面的代码

Console.WriteLine("Five random integers between 100 and 1000");

for (int counter = 0; counter <= 4; counter++)
    Console.WriteLine("{0}", randomNumber.Next(100, 1000));

/* OUTPUT:
Five random integers between 100 and 1000
904
853
554
290
614
*/

在C#中生成随机的长数字(Int64)

要在C#中生成随机长数,即Int64 ,请使用Random.NextInt64() 方法,该方法返回Int64.MinValueInt64.MaxValue 之间的随机数Int64


var RandomInt64 = new Random();

RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64();
RandomInt64.NextInt64(); 


/* OUTPUT : 
5200810282391000059
6501337495320049889
6318562423063201438
3733878081804548122
8421209223603063849
*/

在给定范围内生成随机长数(Int64)

Random.Next() 相似,Random.NextInt64() 有一个重载方法,它接受Range,即最小值和最大值作为参数,返回它们之间的一个随机Int64

要生成100000到200000之间的随机数,请使用下面的代码


var RandomInt64 = new Random();


Console.WriteLine("Five random integers between 100000 and 200000");

for (int counter = 0; counter <= 4; counter++)
    Console.WriteLine("{0}", RandomInt64.NextInt64(100000, 200000));

/* OUTPUT:
Five random long Int64 numbers between 100000 and 200000
144220
194475
185075
159433
136542
*/

生成的随机数不是完全随机的,因为使用了一种数学算法来选择它们,但它们对于大多数现实世界的情况来说是足够好的。

在生成随机数时避免重复

如果你要初始化一个以上的new Random() 类。

你可能会得到重复的随机数。(多线程的应用程序)

var randomOne = new Random();
var randomTwo = new Random(); // Don't do this

所以最好只初始化一个Random() 类实例,并在整个应用程序中使用它。

//Function to generate unique random number using `Random()` class

private static readonly Random randomInstance = new Random();

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

如果你想生成一系列的随机数,在多线程环境中使用上述方法。

使用密码学C# RandomNumberGenerator

如果你想生成真正唯一的随机数,你可以使用RandomNumberGenerator ,该类是System.Security.Cryptography 库的一部分。

这个类可以生成一个加密安全的随机数,并适用于创建一个随机密码。

var randomNumber= RandomNumberGenerator.GetInt32(Int32.MaxValue);

我们也可以将范围传递给RandomNumberGenerator 方法。

var randomNumber= RandomNumberGenerator.GetInt32(2000,5000);

使用C# RNGCryptoServiceProvider

这个类现在已经过时了,不要再使用这个方法。

RNGCryptoServiceProvider 使用加密服务提供商(CSP)提供的实现,实现一个加密的随机数发生器(RNG)。

使用下面的代码用 C# RNGCryptoServiceProvider 类创建一个随机数。

using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
   byte[] randomNumber = new byte[4];//4 for int32
   rng.GetBytes(randomNumber);
   int value = BitConverter.ToInt32(randomNumber, 0);
}

摘要

在本教程中,我们通过简单的例子学习了在C#中生成随机数的不同方法。