Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 随机字符串生成器产生相同结果的问题_C# 4.0_Random - Fatal编程技术网

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

C# 4.0 随机字符串生成器产生相同结果的问题,c#-4.0,random,C# 4.0,Random,我使用随机字符串生成器,基于此: 每隔一段时间,它会生成一个20个字符的len字符串,如下所示 aaaaaaaa当它需要生成一个包含随机字符的20个字符的len字符串时(例如63tsrvvbvdjimnowneb5l),就像C#random对象在20次迭代中每次返回值0一样 public static string GetRandomAlphaNumericString(int charCount) { var result = new string( Enumerable.R

我使用随机字符串生成器,基于此:

每隔一段时间,它会生成一个20个字符的len字符串,如下所示 aaaaaaaa当它需要生成一个包含随机字符的20个字符的len字符串时(例如63tsrvvbvdjimnowneb5l),就像C#random对象在20次迭代中每次返回值0一样

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());
这对我来说毫无意义,我可以在这个发电机里监督什么?生成器工作正常,但偶尔,很少,它会像这样在短时间内生成一个打击AAAAAAAAA字符串

我在代码中没有看到bug,所以对我来说这是两件事情中的一件,或者C#Random对象在某些情况下表现得很滑稽,在短时间内返回0,或者在短时间内,CHARS const字符串在程序集中从“abcdefghijklmnopqrstuvwxyzabdefghijklmnopqrstuvxyzo123456789”更改为“a”

我不敢相信这可能是上述任何一种情况,我更愿意相信我在监督一些事情。你看到或想象过这怎么可能发生吗

更新日期:2017年10月23日 编写了一个测试例程,因此如果GetRandomAlphaNumericString生成邪恶的aaaaaa字符串,它将抛出一个错误,但之前会记录一个快速报告

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

    SHARED_RANDOM.Next(20);
    SHARED_RANDOM.Next(20);
    SHARED_RANDOM.Next(20);
产生的3个数字是0,不错吧

这告诉我问题不在于GetRandomAlphaNumericString,而在于随机对象本身。
有某种破坏导致对象返回这些结果,所以基本上它可以是任何东西

我相信这是因为你的静态随机变量改变它,它可能会工作你的应用程序有多线程
Random
不是线程安全的。对于其他读者,OP在这里找到了问题的解决方案。TL;博士;-通过跨多个线程共享静态
随机
,RNG可能会中断,导致其返回0。Random不是线程安全的。