2013-07-18 95 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對象持久化,則每次調用該對象時都需要使用僞隨機值對其進行播種。

相關問題