【问题标题】:Duplicate rows being added to datagrid when adding in for loop添加 for 循环时将重复行添加到数据网格
【发布时间】:2018-09-01 20:42:02
【问题描述】:

当我将生成的值输出到数据网格中时,它会在将唯一值添加到数据网格之前将相同的值放置大约 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

【问题讨论】:

  • 我们需要查看两个循环来确定您的问题
  • 你能提供更多关于你想要获得什么的细节吗?描述不是很清楚,这可以解释否决票。你能像@DanielLoudon 说的那样分享更多代码吗?
  • @Daniel Loudan @Mikitori 用于另一个循环,因为我允许用户输入我只是在做 ` for (var i = 0; i i.imgur.com/hily9ej.png
  • 那个哈希值是一样的。使用调试器进行确认。 MD5 哈希的部分字符串版本没有任何随机性,因此没有太多理由期望它们不同
  • @Plutonix 我可以确认它的不同,因为每次我转换为 md5 它都是一个独特的值

标签: c# for-loop datagrid


【解决方案1】:

最好练习使用一个随机类,而不是生成多个随机类,因为随机类有可能具有相同的种子并生成相同的数字。这是因为它依赖于时钟来创建种子,并且在每次初始化之间可能没有很多时间的循环中,多个类将具有相同的随机种子值并产生相同的“随机”数集,因此多次生成相同的 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;

【讨论】:

  • 好吧,我去试试,如果它有效,我会回来报告
  • 您的随机类是根据时钟初始化的,因此在循环内初始化随机类可能会导致多个类具有相同的种子并产生相同的值。值得一试,因为我没有别的了,哈哈
  • 这就是为什么我们需要比您想象的更多的代码!您可以通过单击帖子下方的“编辑”按钮来更新您的问题。不客气:)
  • 再次感谢,是的,我们确实需要比我们想象的更多的代码:D
猜你喜欢
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 2015-03-10
  • 1970-01-01
相关资源
最近更新 更多