2013-07-18 128 views
-1
public string Weird 
{ 
    get 
    { 
     int length = 10; 
     Random random = new Random(); 
     string chars = "123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXZ"; 
     StringBuilder builder = new StringBuilder(length); 

     for (int i = 0; i < length; i++) 
     { 
      builder.Append(chars[random.Next(chars.Length)]); 
     } 

     return builder.ToString(); 
    } 
} 

Response.Write(Weird); 
Response.Write("<br />"); 
Response.Write(Weird); 
Response.Write("<br />"); 
Response.Write(Weird); 

Result : 

9eFZ5XrJxZ 
9eFZ5XrJxZ 
9eFZ5XrJxZ 

我认为每次调用的结果都会不同,但它会返回相同的结果值。 它可能是怎么回事? 一旦分配了变量,那么get方法将不会再次运行?随机()为每个调用产生相同的结果

+1

http://msmvps.com/blogs/jon_skeet/archive/2009/11/04/revisiting-randomness.aspx < - 如果你要必读使用随机。 – Oded

+0

请将来不要在标题中使用标签。 –

回答

4

http://msdn.microsoft.com/en-us/library/system.random.aspx

随机从种子值数生成开始。如果重复使用相同的种子,则生成相同的一系列数字。产生不同序列的一种方法是使种子值与时间相关,从而与每个新的Random实例产生不同的序列。

默认情况下,Random类的无参数构造函数使用系统时钟来生成其种子值,而其参数化构造函数可以基于当前时间的滴答数取Int32值。但是,由于时钟具有有限的分辨率,因此使用无参数构造函数以紧密连续的方式创建不同的随机对象会产生随机数发生器,从而产生相同的随机数序列。

+0

我在msdn的文章中添加了更多的解释 –

0

如果您不能在调用之间使Random对象持久化,则每次调用该对象时都需要使用伪随机值对其进行播种。

相关问题