c# 如何生成随机数
技术百科
星降
发布时间:2026-01-26
浏览: 次 最常用方式是复用同一Random实例,避免循环中重复创建;多线程应使用Random.Shared(.NET 6+)或ThreadLocal;安全场景必须用RandomNumberGenerator。
用 Random 类生成基本随机数
最常用也最直接的方式是实例化 Random 类,然后调用它的方法。注意:不要在循环里反复新建 Random 实例,否则可能因种子相同导致重复序列。
推荐做法是复用同一个实例,尤其在高频调用场景下:
var rand = new Random(); int num = rand.Next(); // 0 到 int.MaxValue 之间 int range = rand.Next(1, 101); // 1 到 100(不含 101) double d = rand.NextDouble(); // [0.0, 1.0)
Random 在多线程下不安全
Random 实例不是线程安全的。多个线程同时调用 Next() 可能抛出 InvalidOperationException 或返回异常值(如负数、超限值)。
解决方案有三种,按推荐顺序:
- 用
ThreadLocal每线程隔离实例 - 改用
Random.Shared(.NET 6+,静态、线程安全) - 加锁(性能差,仅临时应急)
.NET 6 起推荐写法:
int safeNum = Random.Shared.Next(1, 101);
需要密码学安全?别用 Random
Random 和 Random.Shared 都是伪随机,可预测,**绝不能用于生成 Token、加密密钥、验证码盐值等安全敏感场景**。
应改用 System.Security.Cryptography.RandomNumberGenerator:
var bytes = new byte[4]; RandomNumberGenerator.Fill(bytes); int cryptoRand = BitConverter.ToInt32(bytes) & 0x7FFFFFFF;
这个值不可预测,但开销比 Random 高一个数量级,只在真正需要时用。
常见陷阱和兼容性注意
容易被忽略的点:
-
Next(min, max)的max是**排他上限**,比如Next(0, 5)只返回 0–4 - .NET Framework 与 .NET Core/.NET 5+ 的
Random算法不同,同一种子产生的序列不一致 - 给

Random传固定种子(如new Random(42))适合测试,但线上必须省略参数或用系统时间 - Unity 中若在
Update()里每帧 new Random(),大概率得到一串相同数字
种子逻辑本身不难,但错一次就可能让“随机”变成“固定”,尤其在分布式或高并发服务里,得盯紧实例生命周期和调用上下文。
# 能让
# 都是
# 线上
# 多个
# 最常用
# 复用
# 就可
# 循环
# 并发
# c#
# .net
# 线程
# red
# 多线程
# 算法
# Token
# crypto
# 不含
# 分布式
# 随机数
# unity
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows10如何更改计算机工作组_Win10
- Win10怎样清理C盘Steam游戏缓存_Win1
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- Windows蓝屏BAD_POOL_HEADER故
- Win11怎样安装网易云音乐_Win11安装网易云
- php8.4新语法match怎么用_php8.4m
- Mac如何修改Hosts文件?(本地开发与屏蔽网站
- Win10系统字体模糊怎么办_Windows10高
- 如何用正则与预处理结合精准拦截拼接式垃圾域名
- Win11怎么关闭系统推荐内容_Windows11
- Django 密码修改后会话失效的解决方案
- C#怎么创建控制台应用 C# Console Ap
- 如何用::实现工具类方法调用_php静态工具类设计
- PHP主流架构怎么处理表单验证_规则与自定义【技巧
- c++怎么使用std::unique实现去重_c+
- Windows如何查看和管理已安装的字体?(字体文
- 如何使用Golang encoding/json解
- Windows10系统怎么查看CPU核心数_Win
- Win11怎么设置开机密码_Windows11账户
- 如何在 ACF 中正确更新嵌套多层的 Group
- Windows 11怎么设置默认解压软件_Wind
- Win11怎么连接蓝牙耳机_Win11蓝牙设备配对
- Python网络日志追踪_请求定位解析【教程】
- Python高性能计算项目教程_NumPyCyth
- 手机php怎么转mp4_手机端php文件转mp4a
- Win11怎样安装企业微信_Win11安装企业微信
- Python与MongoDB NoSQL开发实战_
- 如何在 IIS 上为 ASP.NET 6 应用排除
- PHP cURL GET请求:正确设置请求头与身份
- Win11怎么设置DNS服务器_Windows11
- Linux如何安装JDK11_Linux环境变量配
- Linux如何挂载新硬盘_Linux磁盘分区格式化
- Win11如何设置电源计划_Win11电源计划优化
- Win11 explorer.exe频繁崩溃_修复
- Windows11怎么用“记事本”自动换行与编码
- c++中如何使用虚函数实现多态_c++多态性实现原
- Windows10蓝屏代码DPC_WATCHDOG
- windows系统找不到无线网络怎么办_windo
- 如何使用Golang进行HTTP服务性能测试_测量
- 如何使用Golang实现路由参数绑定_使用Mux和
- Go 中 defer 在 goroutine 内部
- Win11如何设置ipv6 Win11开启IPv6
- 如何开启Windows的远程服务器管理工具(RSA
- Win10怎么查看内存时序参数_Win10CPU-
- 如何在 Pandas 中按元素交集合并两列字符串
- Win11截图快捷键是什么_Win11自带截图工具
- C++如何使用std::optional?(处理可
- 如何在Golang中定义接口_抽象方法和多态实现
- Win11鼠标灵敏度怎么调 Win11鼠标指针移动
- Win11开机Logo怎么换_Win11自定义启动


QQ客服