You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么循环中调用Random会生成不同数值?添加static修饰符有何影响?

C# Random类常见问题解答

1. 随机数序列每次运行、每次调用均不同的原因

Random本质是伪随机数生成器,并非生成真随机值,运行逻辑如下:

  • 无参数创建Random实例时,默认以操作系统当前的时间戳作为初始种子值,每次程序运行的时间戳不同,种子值不同,生成的整个随机数序列自然不同。
  • 同一个Random实例每次调用Next()方法时,会基于上一次生成的结果通过固定算法迭代计算下一个值,因此循环内连续调用同一个实例的方法时,会按迭代顺序输出,不会重复基于相同基准计算值。

2. 测试时无重复值的原因

你调用的Next(0,10)会返回0到9(左闭右开)共10个可能的整数值,循环刚好执行10次,这种场景下10个值完全不重复的概率约为0.036%,属于小概率事件,并不是必然结果。你可以多测试几十次,或者把循环次数调整到11次以上(根据鸽巢原理,11次取值必然出现重复),就能看到重复的输出值。

3. 给_rand添加static修饰符的影响

static修饰的字段属于类本身,而非类的实例,修改后会产生以下变化:

  • 所有该类的实例会共用同一个Random实例,不会每次创建类对象时都初始化新的Random。
  • 可以避免短时间内批量创建类实例时,多个Random实例取到相同/相近时间戳作为种子,输出完全相同随机序列的常见问题。
  • 注意Random不是线程安全类,如果在多线程场景下并发调用该方法,共用同一个静态Random实例可能会出现生成异常,极端情况会持续返回0值,多线程场景需要额外加锁处理。

内容的提问来源于stack exchange,提问作者WideWood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:15:08