在C#开发中,生成随机数是很多场景下的基础需求,比如游戏中的随机事件触发、测试数据的批量生成、抽奖系统的中奖号码生成等,都可以通过Random类来实现。Random类是.NET框架提供的专门用于生成伪随机数的工具类,掌握它的使用方法能有效提升开发效率。

Random类的基础使用
使用Random类之前需要先创建它的实例,之后就可以通过实例的对应方法生成不同类型的随机数。首先来看最基础的随机整数生成方式。
生成随机整数
Random类的Next()方法可以生成随机整数,它有三个重载版本,分别对应不同的使用场景。
无参数的Next()方法会生成大于等于0的随机整数,具体范围由.NET运行时的实现决定,通常是0到Int32.MaxValue之间的数值。
using System;
class Program
{
static void Main()
{
// 创建Random实例
Random random = new Random();
// 生成0到Int32.MaxValue之间的随机整数
int randomNum = random.Next();
Console.WriteLine($"生成的随机整数: {randomNum}");
}
}
如果需要生成指定范围内的随机整数,可以使用带两个参数的Next(int minValue, int maxValue)重载,注意生成的随机数会包含最小值,不包含最大值。
using System;
class Program
{
static void Main()
{
Random random = new Random();
// 生成1到100之间的随机整数,包含1,不包含100
int randomInRange = random.Next(1, 100);
Console.WriteLine($"1到100之间的随机整数: {randomInRange}");
}
}
生成随机浮点数
如果需要生成0.0到1.0之间的随机浮点数,可以使用NextDouble()方法,该方法返回的是double类型的数值,范围是大于等于0.0,小于1.0。
using System;
class Program
{
static void Main()
{
Random random = new Random();
// 生成0.0到1.0之间的随机浮点数
double randomDouble = random.NextDouble();
Console.WriteLine($"随机浮点数: {randomDouble}");
// 生成指定范围的随机浮点数,比如10.0到20.0之间
double min = 10.0;
double max = 20.0;
double randomDoubleInRange = min + random.NextDouble() * (max - min);
Console.WriteLine($"10.0到20.0之间的随机浮点数: {randomDoubleInRange}");
}
}
生成随机字节序列
Random类还提供了NextBytes(byte[] buffer)方法,可以用来填充字节数组,生成随机的字节序列,适合需要随机二进制数据的场景。
using System;
class Program
{
static void Main()
{
Random random = new Random();
// 创建长度为8的字节数组
byte[] randomBytes = new byte[8];
// 用随机字节填充数组
random.NextBytes(randomBytes);
Console.WriteLine($"随机字节序列: {BitConverter.ToString(randomBytes)}");
}
}
常见使用技巧
避免短时间内生成重复随机数
很多开发者会在循环或者短时间内多次创建Random实例,这时候很容易生成重复的随机数,因为Random的默认构造函数会使用系统当前时间作为种子,而短时间内系统时间变化很小,导致不同实例的种子相同,生成的随机数序列也相同。
正确的做法是复用同一个Random实例,而不是频繁创建新实例。
using System;
class Program
{
static void Main()
{
// 只创建一个Random实例
Random random = new Random();
for (int i = 0; i < 5; i++)
{
// 复用同一个实例生成随机数
int num = random.Next(1, 100);
Console.WriteLine($"第{i+1}个随机数: {num}");
}
}
}
生成不重复的随机序列
如果需要生成一组不重复的随机数,比如抽奖时不能重复中奖,可以先生成有序序列,再进行随机打乱。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
Random random = new Random();
// 生成1到10的有序序列
List<int> numbers = Enumerable.Range(1, 10).ToList();
// 随机打乱序列
for (int i = numbers.Count - 1; i > 0; i--)
{
int swapIndex = random.Next(i + 1);
int temp = numbers[i];
numbers[i] = numbers[swapIndex];
numbers[swapIndex] = temp;
}
Console.WriteLine("打乱后的不重复序列:");
foreach (int num in numbers)
{
Console.Write($"{num} ");
}
}
}
生成指定长度的随机字符串
结合Random类和字符集合,可以生成指定长度的随机字符串,适合生成验证码、随机密码等场景。
using System;
using System.Text;
class Program
{
static void Main()
{
Random random = new Random();
// 定义可选的字符集合,包含大小写字母和数字
string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
int length = 6; // 随机字符串长度
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < length; i++)
{
// 随机选取字符集合中的字符
int index = random.Next(chars.Length);
stringBuilder.Append(chars[index]);
}
string randomString = stringBuilder.ToString();
Console.WriteLine($"生成的6位随机字符串: {randomString}");
}
}
注意事项
Random类生成的是伪随机数,不是真正的随机数,它的随机性是基于算法和种子值实现的。如果对随机数的安全性有要求,比如生成加密用的随机密钥,不建议使用Random类,而应该使用System.Security.Cryptography.RandomNumberGenerator类,该类可以生成密码学安全的随机数。
另外,如果需要在多线程环境下使用Random类,需要注意线程安全问题,因为Random类的实例方法不是线程安全的,多个线程同时操作同一个实例可能会导致生成的随机数不符合预期,这时候可以为每个线程创建独立的Random实例,或者使用锁机制保证同一时间只有一个线程操作实例。
C#Random类随机数生成Next方法NextDouble方法修改时间:2026-07-01 19:06:34