Quindi, ho scritto un piccolo e, da quello che inizialmente ho pensato, un metodo semplice in C#. Questo metodo statico è pensato per essere usato come un semplice generatore di password suggestione, e il codice è simile al seguente:La mia funzione C# statica sta giocando con me ... totalmente strano!
public static string CreateRandomPassword(int outputLength, string source = "")
{
var output = string.Empty;
for (var i = 0; i < outputLength; i++)
{
var randomObj = new Random();
output += source.Substring(randomObj.Next(source.Length), 1);
}
return output;
}
Io chiamo questa funzione come questa:
var randomPassword = StringHelper.CreateRandomPassword(5, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
Ora, questo metodo quasi sempre restituire stringhe casuali come "AAAAAA", "BBBBBB", "888888" ecc., dove ho pensato che dovrebbe restituire stringhe come "A8JK2A", "82mOK7" ecc.
Tuttavia, ed ecco la parte strana; Se metto un punto di interruzione e passo a capo di questa iterazione riga per riga, ottengo in cambio il tipo corretto di password. Nel 100% degli altri casi, quando Im non esegue il debug, mi dà schifo come "AAAAAA", "666666", ecc.
Com'è possibile? Ogni suggerimento è molto apprezzato! :-)
BTW, il mio sistema: Visual Studio 2010, C# 4.0, progetto RTM ASP.NET MVC 3 con server di sviluppo ASP.NET. Non ho testato questo codice in nessun altro ambiente.
Non so se causa il problema, ma probabilmente non si desidera creare una nuova istanza di Random in ogni iterazione. Dovresti farlo una volta prima del ciclo. Il costruttore predefinito di Random utilizza Environment.TickCount come seme. Inoltre, il valore predefinito per la sorgente non ha molto senso poiché penso che la stringa vuota causerà un errore nella chiamata a Sottostringa. –
Avete ragione, signor Putty! Inizialmente avevo messo la stringa "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890". Grazie! – CoderBang