当前位置: 首页 > news >正文

C# 中生成随机数的常用方法

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 位小数生成指定精度的随机小数,适合需要控制小数位数的场景(如金额)

关键说明:

  1. Random类适合普通场景,创建成本低但随机性较弱,避免短时间内创建多个实例(可能生成相同序列)
  2. RandomNumberGenerator类提供加密级随机性,适合安全相关场景,但性能开销略高
  3. 多线程环境中,Random需要同步处理,RandomNumberGenerator则线程安全
  4. 如需可重复的随机序列(如测试),可使用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)
http://www.dtcms.com/a/309673.html

相关文章:

  • 消息顺序、消息重复问题
  • 在VScode里运行并调试C++程序
  • SpringMVC的拦截器
  • Mermaid流程图可视化系统:基于Spring Boot与Node.js的三层架构实现
  • gradio作为原型工具
  • 专业餐饮直播如何激发食欲与购买欲?
  • zabbix的PostgreSQL监控模板中文环境采集问题处理
  • 【BFS】P7555 [USACO21OPEN] Maze Tac Toe S|普及+
  • Java向量化
  • C语言使用GmSSL库实现sm3、sm4算法
  • SH3001六轴传感器应用(二)(IIC驱动开发)
  • Linux---编辑器vim
  • JAVA结合AI
  • Linux 硬盘分区管理
  • 工程化(一):Vite vs. Webpack:从“打包”到“服务”,构建工具的范式转移
  • 鸿蒙系统下的动态负载均衡实战:让分布式任务调度更智能
  • 灵敏度,精度,精确度,精密度,精准度,准确度,分辨率,分辨力——概念
  • 谈谈对反射的理解?
  • AJAX 解析与高频问题
  • 在 MEF 中处理多个 Tab 页对应同一模块的不同实例
  • python进程、线程、协程
  • 第二十三天(数据结构:链表补充【希尔表】)
  • 海外商城 app 系统架构分析
  • 电子电气架构 --- 软件项目变更管理
  • Corrosion2靶机攻略
  • 第七章 愿景12 小萍分享《人性的弱点》
  • 大模型推理引擎总结
  • AIGC(生成式AI)试用 35 -- 用AI解析句子结构
  • 力扣-最大单词长度乘积
  • 守护数字核心:主机安全的重要性与全方位防护指南