none
Guid.NewGuid() 还是会产生重复数 ,怎么办? RRS feed

  • 问题

  • 我以下的代码运行完后就会产生重复数字:

    private void timer1_Tick(object sender, EventArgs e)
            {
                num = Enumerable.Range(0, NameList.Count)
                   .Select(x => new { v = x, k = Guid.NewGuid().ToString() }).ToList()
                   .OrderBy(x => x.k)
                   .Select(x => x.v)
                   .Take(Quality).ToList(); //假设NameList.Count=100,Quality=10;

                selected = null;
                string[] str = new string[0];
                List<string> strlist = str.ToList();

                foreach (int j in num)
                {
                    strlist.Add(NameList[j].ToString());
                    str = strlist.ToArray();
                }
                for (int i = 0; i < Quality; i++)
                //for (int i = 0; i < Times; i++)
                {
                    labelList[i].Text = str[i].ToString();
                    selected += labelList[i].Text;             
                }           
            }

    请问这个问题该怎么处理?谢谢大家不吝赐教!

    2016年4月19日 8:49

答案

  • Hi 午夜流星,

    你可以试试把GUID在外面实例化一下在调用,Random貌似也有这个问题(在循环或者方法内部实例化的类,随机产生的数据相同)

                Guid guid = new Guid();
                num = Enumerable.Range(0, NameList.Count)
                  .Select(x => new { v = x, k = guid.NewGuid().ToString() }).ToList()
                  .OrderBy(x => x.k)
                  .Select(x => x.v)
                  .Take(Quality).ToList(); //假设NameList.Count=100,Quality=10;

    我猜在方法中实例的对象始终调用之前的最开始获取的值(应该与线程还有cpu时钟相关)。

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.



    2016年4月20日 5:51

全部回复

  • 你的k只用来排序,和重复数有啥关系

    http://feiyun0112.cnblogs.com/

    2016年4月20日 3:34
    版主
  • Hi 午夜流星,

    你可以试试把GUID在外面实例化一下在调用,Random貌似也有这个问题(在循环或者方法内部实例化的类,随机产生的数据相同)

                Guid guid = new Guid();
                num = Enumerable.Range(0, NameList.Count)
                  .Select(x => new { v = x, k = guid.NewGuid().ToString() }).ToList()
                  .OrderBy(x => x.k)
                  .Select(x => x.v)
                  .Take(Quality).ToList(); //假设NameList.Count=100,Quality=10;

    我猜在方法中实例的对象始终调用之前的最开始获取的值(应该与线程还有cpu时钟相关)。

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.



    2016年4月20日 5:51
  • 谢谢你的热心回答!

    我后来仔细调试了 一下程序,是因为我的程序有BUG,所以老是出现重复的随机数!

    已经解决了!你的回复可以作为参考和借鉴供其它遇到类似的问题的人看看!

    2016年4月20日 9:21