随机字符串生成器产生相同结果的问题

时间:2017-10-16 11:58:27

标签: c#-4.0 random

我使用随机字符串生成器,基于此: http://stackoverflow.com/questions/1344221/how-can-i-generate-random-8-character-alphanumeric-strings-in-c

每隔一段时间,它会生成一个20个字符的len字符串 aaaaaaaaaaaaaaaaaaaa 当需要生成一个充满随机字符的20个字符len字符串(例如 63TSRVvbVDJiMNwneB5l )时20次迭代。

public static string GetRandomAlphaNumericString(int charCount)
{
  var result = new string(
      Enumerable.Repeat(CHARS, charCount)
                .Select(s =>
                {
                  var nxt = SHARED_RANDOM.Next(s.Length);
                  var rval = s[nxt];

                  return rval;
                })
                .ToArray());
  return result;
}

const string CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

public static Random SHARED_RANDOM = new Random(Guid.NewGuid().GetHashCode());

对我来说没有意义,我可以在这台发电机上监督什么?发电机工作正常,但是偶尔,非常罕见,它会像这样在短时间内产生一个打击aaaaaaa字符串。

我没有看到代码中的错误,所以对我来说,它是2件事中的一件,或者C#Random对象在某些情况下表现得很有趣,在短时间内返回0,或者CHARS const字符串从" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"到" a"在装配中由于某种原因,在短时间内。

我无法相信它可能是上述任何一种,我更愿意相信我会监督某些事情。你看到或想象这怎么可能发生?

2017年10月23日更新

编写测试例程,如果 GetRandomAlphaNumericString 产生邪恶的 aaaaa 字符串,则会抛出错误,但会在之前记录快速报告。

该报告连续生成3个随机数,并将其添加到日志中:

    SHARED_RANDOM.Next(20);
    SHARED_RANDOM.Next(20);
    SHARED_RANDOM.Next(20);

产生的3个数字是0,很好呃?

这告诉我问题不是 GetRandomAlphaNumericString ,而是Random对象本身。 有某种腐败导致对象返回那些结果,所以基本上它可以是任何东西?!

0 个答案:

没有答案