c# - Erro ao usar random - Stack Overflow em Português
Defini um numero randomico para preencher uma tabela ficticia e fiz assim:
foreach (var usuario in LstUsuarios)
htmlUsuarios.AppendLine("<tr>");
htmlUsuarios.AppendLine("<td>" + usuario.Nome + "</td>");
htmlUsuarios.AppendLine("<td><strong>" + usuario.NomePerfil + "</strong></td>");
htmlUsuarios.AppendLine("<td>" + usuario.UnidadeGerencial.Txt_Sigla_UG + "</td>");
for (var i = 1; i <= num_periodos; i++)
random = rnd.Next(1, 99);
htmlUsuarios.AppendLine("<td> " + random + "</td>");
htmlUsuarios.AppendLine("<td>100</td>");
htmlUsuarios.AppendLine("</tr>");
Porém na aplicação está aparecendo sempre o mesmo número.
O curioso é que quando eu debugo no visual studio ele realmente gera números diferentes.
O que está fora da linha vermelha é a parte que eu debuguei no VS, fui verificando com os breakpoints e os numeros iam mudando. Mas quando eu apertava continue no VS ele voltava a gerar o mesmo número que são os que estão dentro da linha vermelha.
Não entendi o por quê disso. Alguma idéia?
perguntada 30/05/14 às 14:18
Coloque a instância do Random() fora do for no seu caso:
Como está sendo criado o Random dentro do for cada item gerado é uma nova instância, e com isso o Seed inicial é o mesmo, fato calculado pelo Enviroment.TickCount.
Sobre o debug:
Justamente por causa do Enviroment.TickCount vai ter outro valor no debug, e em cada F11 por exemplo, vai mudar o cálculo do milissegundos.
editada 30/05/14 às 21:09
respondida 30/05/14 às 14:21
Só acrescentaria um detalhe a dizer que isto acontece porque como uma instância do Random é criada a cada iteração, a seed vai ser a mesma (sem passar uma seed o Random usa o Enviroment.TickCount) e daí ter números repetidos. O comportamento não era observado durante Debug porque o código vai ser executado mais lentamente o que permite ter seeds diferentes. – Omni 30/05/14 às 14:24
@Omni isso mesmo !!! – user6026 30/05/14 às 14:25
E vocês tem ideia de porque quando estou debugando ele gera numeros diferentes? – Joao Paulo 30/05/14 às 14:42
Justamento por causa do Enviroment.TickCount vai ter outro valor no debug, e em cada F11 por, exemplo, ele vai mudar o calculo do milissegundos – user6026 30/05/14 às 14:45
@JoaoPaulo "O comportamento não era observado durante Debug porque o código vai ser executado mais lentamente o que permite ter seeds diferentes." Esta lentidão pode vir do utilizador estar a fazer debug passo a passo ou do simples overhead causado pelo debugger. – Omni 30/05/14 às 14:54
Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag c# random ou faça sua própria pergunta.