ilovecomputer66 发表于 2023-2-16 16:42

同样装了.NET6.0的不同电脑上运行,C# Random类用同样seed,能生成同样的随机数么?

官方MSDN上没有给出这个问题的任何说明:https://learn.microsoft.com/zh-cn/dotnet/api/system.random?view=net-7.0

我就一台电脑,没法测试

private void button7_Click(object sender, EventArgs e)
      {
            Random r1 = new Random(1234567);
            List<int> l1 = new List<int>();
            for (int i = 0; i < 10; i++)
                l1.Add(r1.Next(9));

            Random r2 = new Random(1234567);
            List<int> l2 = new List<int>();
            for (int i = 0; i < 10; i++)
                l2.Add(r2.Next(9));

            bool isAllEquals = true;
            for (int i = 0; i < 10; i++)
            {
                if (l1 != l2)
                  isAllEquals = false;
            }

            StringBuilder sb = new StringBuilder();
            sb.Append($"生成是否相同:{isAllEquals}\n具体随机的数字为:\n");
            for (int i = 0; i < 10; i++)
                sb.Append(l1).Append(",");

            MessageBox.Show(sb.ToString());
      }


仅仅只在我电脑上,多次运行,永远是

7,6,2,1,5,8,8,4,4,1,

ctacy 发表于 2023-2-16 16:55

在C#中,如果使用相同的种子(seed)实例化Random类,可以生成相同的随机数序列。但是,在不同的电脑上使用不同版本的.NET Core可能会导致不同的随机数生成算法,从而生成不同的随机数序列。

由于计算机生成的随机数本质上是伪随机数,因此在不同的操作系统、硬件和软件环境中,可能会产生不同的随机数序列。因此,使用相同的种子(seed)实例化Random类并不能保证在不同的电脑上生成相同的随机数序列。

如果您需要在多个计算机之间生成相同的随机数序列,建议使用特定的随机数生成算法,并确保在所有计算机上使用相同的算法和实现。

Je11y 发表于 2023-2-16 16:56

同编译器同种子结果是一样的

ctacy 发表于 2023-2-16 16:58

---------------------------

---------------------------
生成是否相同:True
具体随机的数字为:
7,6,2,1,5,8,8,4,4,1,
---------------------------
确定   
---------------------------

kenxy 发表于 2023-2-16 17:16

我电脑生成的也是一样的

不知道改成啥 发表于 2023-2-16 17:44

种子你用Guid就不一样了{:301_971:}

yuyunxi 发表于 2023-2-16 18:23

z746090883 发表于 2023-2-16 18:29

建议 使用GUID ,guid不会重复

Broadm 发表于 2023-2-16 19:09

我的电脑生成的也一样, 只要类库算法一致,肯定生成的相同,, 相同的.net版本没改算法的话,是一致的

ilovecomputer66 发表于 2023-2-16 19:39

2楼和3楼说法明显是对立的。2楼说和目标电脑有关。3楼说之和编译时有关
页: [1] 2 3
查看完整版本: 同样装了.NET6.0的不同电脑上运行,C# Random类用同样seed,能生成同样的随机数么?