全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C# 如何生成随机数 - Random类的正确使用姿势

正确使用Random需注意实例化方式:应声明为静态只读字段复用,避免频繁新建导致重复;多线程下用ThreadLocal隔离实例防冲突;加密场景改用RandomNumberGenerator确保安全;高频操作可封装提升复用性。

生成随机数看似简单,但用错 Random 类很容易导致重复、不随机,甚至多线程下崩溃。核心问题不在“怎么写”,而在“怎么实例化”和“怎么复用”。

别在方法里 new Random()

每次调用都新建一个 Random 实例,尤其在循环或高频方法中,会因系统时间种子相同而产生一连串重复值。

错误写法:

int GetRandomNumber() {
    var r = new Random(); // ❌ 每次都新造一个,种子可能一样
    return r.Next(1, 100);
}

正确做法:把 Random 声明为 静态只读字段,全局复用一个实例:

private static readonly Random _random = new Random();

int GetRandomNumber() {
    return _random.Next(1, 100); // ✅ 安全、高效、真随机
}

多线程环境下要用 ThreadLocal

Random 不是线程安全的——多个线程同时调用 Next() 可能导致内部状态损坏,返回 0 或异常。

推荐方案:用 ThreadLocal 为每个线程独享一个实例:

private static readonly ThreadLocal _threadLocalRandom 
    = new ThreadLocal(() => new Random());

int GetRandomInParallel() {
    return _threadLocalRandom.Value.Next(1, 100);
}

这样既避免锁开销,又杜绝线程冲突。

需要加密级随机?换用 RandomNumberGenerator

Random 是伪随机,适合游戏、抽样等场景;但密码、Token、密钥等绝不允许预测,必须用加密安全的随机源。

示例(.NET 6+):

byte[] bytes = new byte[4];
RandomNumberGenerator.Fill(bytes);
int cryptoRandom = BitConverter.ToInt32(bytes) & 0x7FFFFFFF; // 转正整数

旧版本可用 RNGCryptoServiceProvider(已过时但仍可用),不过推荐统一升级到 RandomNumberGenerator

小技巧:封装常用随机逻辑

避免到处写 Next(),把高频操作封装起来,提升可读性和复用性:

  • 随机布尔_random.NextDouble()
  • 随机字符串(字母+数字)Enumerable.Repeat("ABCDEFGHJKLMNPQRSTUVWXYZ23456789", 8).Select(s => s[_random.Next(s.Length)]).ToArray()
  • 随机打乱数组:用 Fisher-Yates 算法,每次交换都依赖 _random.Next(i, array.Length)

基本上就这些。Random 类本身很简单,真正容易出错的是生命周期管理和使用边界。记牢:静态复用、线程隔离、安全场景换 RNG——随机,就该随机得靠谱。


# c#  # .net  # crypto  # cryptos  # Array  # 封装  # select  # Token  # 字符串  # 循环  # Length  # 线程  # 多线程  # 算法  # 复用  # 新造  # 的是  # 密级  # 随机数  # 多个  # 而在  # 很容易  # 很简单 


相关文章: 北京营销型网站制作公司,可以用python做一个营销推广网站吗?  建站之星图片链接生成指南:自助建站与智能设计教程  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  建站之星2.7模板:企业网站建设与h5定制设计专题  家具网站制作软件,家具厂怎么跑业务?  代购小票制作网站有哪些,购物小票的简要说明?  网站制作企业,网站的banner和导航栏是指什么?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  ,有什么在线背英语单词效率比较高的网站?  如何在阿里云高效完成企业建站全流程?  如何在新浪SAE免费搭建个人博客?  盐城做公司网站,江苏电子版退休证办理流程?  公司网站设计制作厂家,怎么创建自己的一个网站?  如何用西部建站助手快速创建专业网站?  如何快速搭建虚拟主机网站?新手必看指南  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  建站主机选择指南:服务器配置与SEO优化实战技巧  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何在宝塔面板创建新站点?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  寿县云建站:智能SEO优化与多行业模板快速上线指南  建站之星如何助力企业快速打造五合一网站?  Bpmn 2.0的XML文件怎么画流程图  家庭建站与云服务器建站,如何选择更优?  建站主机服务器选购指南:轻量应用与VPS配置解析  制作门户网站的参考文献在哪,小说网站怎么建立?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  如何选择可靠的免备案建站服务器?  Swift中循环语句中的转移语句 break 和 continue  Swift中swift中的switch 语句  教学论文网站制作软件有哪些,写论文用什么软件 ?  广州建站公司哪家好?十大优质服务商推荐  专业公司网站制作公司,用什么语言做企业网站比较好?  公司网站制作价格怎么算,公司办个官网需要多少钱?  制作网站怎么制作,*游戏网站怎么搭建?  中山网站推广排名,中山信息港登录入口?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  如何在IIS中新建站点并配置端口与物理路径?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  建站主机如何选?高性价比方案全解析  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  如何零基础开发自助建站系统?完整教程解析  如何获取PHP WAP自助建站系统源码?  定制建站策划方案_专业建站与网站建设方案一站式指南  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何快速查询网站的真实建站时间?  如何在VPS电脑上快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。