Tak, napisałem małą i, jak początkowo sądziłem, łatwą metodę w języku C#. Ta metoda statyczna ma być używany jako prosty generator haseł sugestii, a kod wygląda następująco:Moja statyczna funkcja C# polega na graniu ze mną w gry ... totalnie dziwne!
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;
}
nazywam tę funkcję tak:
var randomPassword = StringHelper.CreateRandomPassword(5, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
Teraz ta metoda prawie zawsze zwracaj losowe ciągi, takie jak "AAAAAA", "BBBBBB", "888888" itd., gdzie myślę, że powinien zwrócić ciągi takie jak "A8JK2A", "82mOK7" itp.
Jednak i tu jest część dziwna; Jeśli wstawię punkt przerwania i przejdę przez tę linię iteracji po linii, otrzymam w zamian prawidłowy typ hasła. W 100% innych przypadków, gdy nie debuguję, daje mi to bzdura jak "AAAAAA", "666666", itd.
Jak to jest możliwe? Wszelkie sugestie są mile widziane! :-)
BTW, mój system: Visual Studio 2010, C# 4.0, ASP.NET MVC 3 RTM projektu w/ASP.NET Development Server. Nie testowałem tego kodu w żadnym innym środowisku.
Nie wiem, czy to powoduje Twój problem, ale prawdopodobnie nie chcesz tworzyć nowej instancji losowej w każdej iteracji. Powinieneś to zrobić raz przed pętlą. Domyślny konstruktor Random używa Environment.TickCount jako materiału siewnego. Ponadto domyślna wartość dla źródła nie ma większego sensu, ponieważ myślę, że pusty ciąg spowoduje niepowodzenie wywołania Substring. –
Masz rację, panie Putty! Początkowo umieszczono tam ciąg "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890". Dzięki! – CoderBang