【问题标题】:C# cannot generate a random string [duplicate]C#无法生成随机字符串[重复]
【发布时间】:2017-05-26 21:58:52
【问题描述】:

我不知道为什么 C# 会这样做。

这是我的代码;

private string RandomString(int length)
    {
        const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        string randomString = "";

        for(int i = 0; i < length; i++)
        {
            randomString += chars.ToCharArray()[new Random().Next(chars.ToCharArray().Length)];
        }

        return randomString;
    }

第一个结果: "wwwwwwwwwwwwwwwwwwwww"

第二个结果: "ssssssssssssssssss"

第三个结果: "mmmmmmmmmmmmmmmmmmmm"

【问题讨论】:

  • 停止每次循环迭代生成一个新的 Random 实例。在循环外声明并初始化它。 (循环太快了,你总是得到相同的种子。)
  • 制作一个Random 对象,因为所有随机对象都具有相同的种子(时间)。

标签: c# .net string random


【解决方案1】:

当您使用new Random() 生成随机数生成器时,它的种子将基于当前时间,因此对于循环的每次迭代,它最终都是相同的,因为执行速度会很快。相反,您希望在循环外使用 var rng = new Random(),并在循环内使用 rng.Next

【讨论】:

  • 这很有效,谢谢。我认为它只会创建一个新的 Random 实例并生成新的整数。奇怪...
  • 它确实会生成Random 的新实例,但它们都有相同的种子,因此生成相同的数字。
猜你喜欢
  • 2010-12-07
  • 2011-11-20
  • 2015-12-29
  • 2015-08-16
  • 2014-02-05
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多