我正在尝试生成一个随机长度的字符串,该字符串由随机char
组成。
为此,我有这段代码:
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;
}
}
现在,让我们看一下输出的一部分:
正如您所看到的,输出远非随机,它包含许多重复的字符串。这怎么可能,我该如何解决呢?
答案 0 :(得分:11)
每次调用Random
构造函数时,您似乎都在创建MyString
类的 new 实例。 Random
类可能会根据当前时间(某些分辨率)自行播种。以相同值播种的随机数发生器将生成相同的伪随机序列。
解决方案是构建 Random
的一个实例并在任何地方使用它。
答案 1 :(得分:0)
http://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename.aspx
string randomName = Path.GetRandomFileName();
randomName = randomName.Replace(".", string.Empty);
// take substring...