试图创建随机值字符串

use*_*877 3 c# string random

我正在尝试生成一个随机长度的字符串,该字符串由随机chars组成.

为此,我有这样的代码:

class Program
{
    static void Main(string[] args)
    {
        for (int i = 0; i < 1000; i++)
        {
            MyString test = new MyString();

            test.Random();
            Console.WriteLine(test.Value);
        }
        Console.ReadLine();
    }
}

public class MyString
{
    private string value = string.Empty;
    private Random r = new Random();

    public string Value
    {
        get { return this.value; }
        set { this.value = value; }
    }

    public void Random()
    {
        int length = (r.Next() % (100)) + 1;
        for(int i = 0; i < length; i++)
        {
            value = value + RandomChar();
        }  
    }

    public char RandomChar()
    {
        // 32 to 126
        int c = (r.Next() % 95) + 32;
        char ch = (char)c;
        return ch;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,让我们看一下输出的一部分:

替代文字

如您所见,输出远非随机,它包含许多重复的字符串.这怎么可能,我该如何解决?

Gre*_*ill 11

看起来每次调用构造函数时都要创建类的实例.该课程可能会根据当前时间(某种分辨率)自行播种.以相同值播种的随机数发生器将生成相同的伪随机序列.RandomMyStringRandom

解决方案是构建一个实例Random并在任何地方使用它.

  • +1作为一个快速修复,考虑使你的`Random`实例静态 - 它可能会改变字符的分布,因为只有一个`Random`实例. (4认同)