Entonces, he escrito un método pequeño y, por lo que inicialmente pensé, fácil en C#. Este método estático está destinado a ser utilizado como un simple generador de contraseñas sugerencia, y el código es el siguiente:Mi función C# estática está jugando juegos conmigo ... ¡Totalmente raro!
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;
}
que llamo esta función como esta:
var randomPassword = StringHelper.CreateRandomPassword(5, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
Ahora, este método casi siempre devolver cadenas aleatorias como "AAAAAA", "BBBBBB", "888888" etc., donde pensé que debería devolver cadenas como "A8JK2A", "82mOK7", etc.
Sin embargo, y aquí está la parte más extraña; Si coloco un punto de interrupción y paso por esta iteración línea por línea, obtengo el tipo correcto de contraseña a cambio. En el 100% de los otros casos, cuando no estoy depurando, me da basura como "AAAAAA", "666666", etc.
¿Cómo es esto posible? ¡Cualquier sugerencia sera grandemente apreciada! :-)
BTW, mi sistema: Visual Studio 2010, C# 4.0, proyecto ASP.NET MVC 3 RTM con ASP.NET Development Server. No he probado este código en ningún otro entorno.
No sé si está causando su problema, pero probablemente no desee crear una nueva instancia de Aleatorio en cada iteración. Deberías hacer esto una vez antes del ciclo. El constructor predeterminado de Random usa Environment.TickCount como una semilla. Además, su valor predeterminado para la fuente no tiene mucho sentido ya que creo que la cadena vacía causará un error en la llamada a la subcadena. –
¡Tiene razón, Sr. Putty! Inicialmente tenía la cadena "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" colocada allí. ¡Gracias! – CoderBang