当添加断点时,C#程序在文件中生成相同的输出
问题描述:
我想生成160个不同的随机用户和密码,现在当我在用户和密码变量(for循环中)上添加断点时,代码似乎正常工作。但是当我运行没有断点的代码时,Passwords.csv对于所有160行具有相同的输出。任何帮助表示赞赏当添加断点时,C#程序在文件中生成相同的输出
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace WriteCSVPasswords
{
class Program
{
static void Main(string[] args)
{
string path = @"c:\temp\Passwords.csv";
string user = null;
string password = null;
string[] file = new string[160];
for (int i = 0; i < 160; i++)
{
user = CreatePassword(4);
password = CreatePassword(5);
file[i] = user + ";" + password + ";" + Base64Encode(user + ":" + password);
user = null;
password = null;
}
if (!File.Exists(path))
{
// Create a file to write to.
File.WriteAllLines(path, file, Encoding.UTF8);
}
}
public static string CreatePassword(int length)
{
const string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.+-!";
StringBuilder res = new StringBuilder();
Random rnd = new Random();
while (0 < length--)
{
res.Append(valid[rnd.Next(valid.Length)]);
}
return res.ToString();
}
public static string Base64Decode(string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
public static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
}
}
答
我怀疑这与断点有关。
(代码灰色使有关的时间差非常好的一点使用断点时,所以它关系到这一点。)
为确保您有一个问题与Random rnd = new Random();
,因为你重新创建随机数生成器,它会重新启动所有然后再次。
我建议在课堂上申报rnd
。
可能*与断点有关,至少在某种意义上说,如果他暂停执行一段时间,时间将会不同,从而产生不同的随机数。 :-) –
好的,好点@CodyGray –
的确,班级的rnd让我得到了正确的答案。 @CodyGray现在我也完全理解为什么这种奇特的行为发生了,毕竟不是特别的;)Thx! – hatsjie