だから、私は最初に思ったものから、C#で簡単な方法を書いてきました。 このstaticメソッドは、単純なパスワードの提案発生器として使用されることを意味し、コードは次のようになりますされています私の静的なC#関数は私とゲームをしています... totaly weird!
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;
}
私はこのように、この関数を呼び出します。ほとんど常に
var randomPassword = StringHelper.CreateRandomPassword(5, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
さて、この方法"AAAAAA"、 "BBBBBB"、 "888888"などのランダムな文字列を返します。 "A8JK2A"、 "82mOK7"などの文字列を返すべきだと思ったところです。
しかしここではwierd部分です。私がブレークポイントを配置し、行ごとにこの繰り返しを実行すると、正しいタイプのパスワードが返されます。他のケースの100%で、私がデバッグしていないときには、 "AAAAAA"、 "666666"などのような駄目です。
これはどうやって可能ですか?どんな提案も大歓迎です! :-)
私のシステム:Visual Studio 2010、C#4.0、ASP.NET MVC 3 RTMプロジェクト、ASP.NET開発サーバー。他の環境でこのコードをテストしていない。
問題が発生しているかどうかはわかりませんが、各繰り返しで新しいインスタンスのランダムを作成する必要はありません。ループの前に一度これを行う必要があります。 Randomのデフォルトコンストラクタは、Environment.TickCountをシードとして使用します。また、空の文字列が部分文字列の呼び出しに失敗すると思うので、sourceのデフォルト値はあまり意味がありません。 –
あなたは正しいです、パテ氏!当初、文字列「ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890」が配置されていました。ありがとう! – CoderBang