2013-07-18 2 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 не будет работать снова?Random(), производя тот же результат для каждого звонка

+1

http://msmvps.com/blogs/jon_skeet/archive/2009/11/04/revisiting-randomness.aspx <- требуется чтение, если вы собираетесь использовать Random. – Oded

+0

Пожалуйста, в дальнейшем не используйте теги в заголовках. –

ответ

4

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

Случайные начинается поколения число от величины семян. Если одно и то же семя используется повторно, генерируется одна и та же серия чисел. Один из способов создания разных последовательностей состоит в том, чтобы сделать начальное значение зависящим от времени, тем самым создавая разные серии с каждым новым экземпляром Random.

По умолчанию конструктор без параметров в классе Random использует системные часы для генерации своего начального значения, тогда как его параметризованный конструктор может принимать значение Int32 в зависимости от количества тиков в текущее время. Однако, поскольку часы имеют конечное разрешение, использование конструктора без параметров для создания разных случайных объектов в непосредственной последовательности создает генераторы случайных чисел, которые производят идентичные последовательности случайных чисел.

+0

Я добавил немного больше объяснений из статьи в msdn –

0

Если вы не можете заставить объект Random сохраняться между вызовами, вам нужно высевать его с псевдослучайным значением каждый раз, когда вы вызываете это.

Смежные вопросы