当我将生成的值输出到datagrid中时,在将唯一值添加到datagrid之前,它会将相同的值放入大约15次。有谁知道这个问题的解决方案或解决方法?另外请注意,我正在另一个for循环中运行此for循环,以生成特定数量的值。
var parts = new List<string>();
string hash = CalculateMD5Hash(identifier);
for (var i = 0; i < 32; i += 2)
{
string chars = "0123456789ABCDEFGHJKLMNPQRTUVWXY";
var nextDigit = Convert.ToInt32(hash.Substring(i, 2), 16) & 31;
var withDash = (((i % 8) == 0) && (i > 0));
parts.Add(withDash ? "-" : "");
parts.Add(chars.Substring(nextDigit, 1));
}
string[] array = parts.ToArray();
string joined = string.Join("", array);
string output = identifier + ":" + joined;
string[] keySplit = output.Split(':');
outputGrid.Rows.Add(keySplit[0], keySplit[1]); //Outputs mulitple times
答案 0 :(得分:0)
而不是生成多个随机类,最好练习使用一个随机类,因为随机类有可能具有相同的种子并生成相同的数字。这是因为它依靠时钟来创建种子,并且在每次初始化之间可能没有太多时间的循环中,多个类将具有相同的随机种子值并产生相同的“随机”数集,因此同一ID多次生成。初始化一个随机类将消除这种风险。
private static readonly Random generator = new Random();
private static readonly object syncLock = new object();
public static int RandomNumber(int min, int max)
{
lock(syncLock) {
return generator.Next(min, max);
}
}
在您的GenId()
方法中:
string digiList = "0123456789";
string alphaList = "ABCDEFGHIJKLMNOPQRSTUVWXY";
string id = digiList[randomNumber(0, digiList.Length)].ToString();
id += alphaList[randomNumber(0, alphaList.Length)].ToString();
id += alphaList[randomNumber(0, alphaList.Length)].ToString();
id += digiList[randomNumber(0, digiList.Length)].ToString();
id += digiList[randomNumber(0, digiList.Length)].ToString();
return id;