1. 使用 Random 类(简单场景)
2. 使用 RandomNumberGenerator 类(安全场景)
3. 生成指定精度的随机小数
C# 中生成随机数的常用方法:
随机数类型 | 实现方式 | 示例代码 | 特点与适用场景 |
---|---|---|---|
随机整数(无范围) | Random 类 | Random rnd = new Random(); int num = rnd.Next(); | 生成 0 到 int.MaxValue 之间的整数,适用于简单随机场景 |
随机整数(指定上限) | Random 类 | int num = rnd.Next(100); // 0-99(不包含 100) | 生成 0 到指定最大值之间的整数,适合需要控制上限的场景 |
随机整数(指定范围) | Random 类 | int num = rnd.Next(5, 15); // 5-14(包含 5,不包含 15) | 生成指定区间内的整数,适用范围明确的场景 |
随机双精度浮点数 | Random 类 | double num = rnd.NextDouble(); // 0.0-1.0(不包含 1.0) | 生成 0 到 1 之间的小数,可通过计算扩展到任意范围 |
安全随机整数 | RandomNumberGenerator 类 | int num = RandomNumberGenerator.GetInt(100); // 0-99 | 加密级随机数生成,适合安全敏感场景(如密码重置令牌),需引用 System.Security.Cryptography |
安全随机字节数组 | RandomNumberGenerator 类 | byte[] data = new byte[16]; RandomNumberGenerator.Fill(data); | 生成指定长度的随机字节数组,用于加密、密钥生成等安全场景 |
指定范围的随机小数 | 结合 Random 与计算 | double num = rnd.NextDouble() * (20 - 5) + 5; // 5.0-20.0 | 生成任意区间的随机小数,通过线性变换实现 |
固定精度随机小数 | 结合 Random 与四舍五入 | double num = Math.Round(rnd.NextDouble() * 100, 2); // 保留 2 位小数 | 生成指定精度的随机小数,适合需要控制小数位数的场景(如金额) |
关键说明:
Random
类适合普通场景,创建成本低但随机性较弱,避免短时间内创建多个实例(可能生成相同序列)RandomNumberGenerator
类提供加密级随机性,适合安全相关场景,但性能开销略高- 多线程环境中,
Random
需要同步处理,RandomNumberGenerator
则线程安全 - 如需可重复的随机序列(如测试),可使用
new Random(固定种子)
构造Random
实例
1. 使用 Random
类(简单场景)
// 创建Random实例(建议程序中只创建一个实例)
Random random = new Random();// 生成0到int.MaxValue之间的随机整数
int randomInt = random.Next();// 生成0到指定最大值(不包含)之间的随机整数
int randomIntWithMax = random.Next(100); // 0-99之间// 生成指定范围内(包含最小值,不包含最大值)的随机整数
int randomIntInRange = random.Next(10, 20); // 10-19之间// 生成0.0到1.0之间的随机双精度浮点数
double randomDouble = random.NextDouble();// 生成指定范围内的随机双精度浮点数
double randomDoubleInRange = random.NextDouble() * (max - min) + min;
2. 使用 RandomNumberGenerator
类(安全场景)
适合加密、安全相关场景,需要引用 System.Security.Cryptography
命名空间:
using System.Security.Cryptography;// 生成0到指定最大值(不包含)之间的随机整数
int secureInt = RandomNumberGenerator.GetInt(100); // 0-99之间// 生成指定范围内的随机整数
int secureIntInRange = RandomNumberGenerator.GetInt(10, 20); // 10-19之间// 生成随机字节数组
byte[] randomBytes = new byte[10];
RandomNumberGenerator.Fill(randomBytes);
3. 生成指定精度的随机小数
// 生成保留2位小数的随机数(0-100之间)
Random random = new Random();
double value = random.NextDouble() * 100;
double roundedValue = Math.Round(value, 2); // 保留2位小数
注意事项:
Random
类的默认构造函数使用系统时钟作为种子,短时间内创建多个实例可能生成相同序列- 多线程环境下使用
Random
需要加锁,或使用RandomNumberGenerator
- 安全敏感场景必须使用
RandomNumberGenerator
- 如需重复生成相同序列,可使用带固定种子的
Random
构造函数:new Random(seed)