首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调试a.k.a F11与“构建解决方案”的不同结果

调试a.k.a F11与“构建解决方案”的不同结果
EN

Stack Overflow用户
提问于 2015-04-03 11:15:56
回答 1查看 51关注 0票数 1

我在我的一堂课上发现了一种奇怪的行为。如果我调试程序,它将按预期的方式工作--它返回数组,其中随机长度填充了来自"string [] basicJobs“的随机字符串元素,该字符串作为类构造函数中的一个参数传递。如果我按下F5开始程序,就会出现奇怪的行为。在这种情况下,CreateWork()返回一个具有随机长度但充满相同字符串的数组。

代码语言:javascript
运行
复制
class WorkCreator
{
    private string[] basicJobs;
    private string[] createdJobs;
    private Random randWorkCount = new Random();
    public WorkCreator(string[] basicJobs)
    {
        this.basicJobs = basicJobs;
    }


    public string[] CreateWork()
    {
        Random randomBasicJob = new Random();
        this.createdJobs = new string[randWorkCount.Next(3, 20)];
        for (int i = 0; i < this.createdJobs.Length; i++)
        {
           // createdJobs[i] = this.basicJobs[randomBasicJob.Next(basicJobs.Length)];

           createdJobs[i] = this.basicJobs[Convert.ToInt16(new Random().Next(this.basicJobs.Length))];

        }

       return createdJobs;
    }

}

我找到了一个解决方案( CreateWork()中的代码注释行),但我仍然想知道这些行为的原因是什么. :(。我正在使用Visual Studio Community 2013.Net 4.5

谢谢你提前帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-03 11:28:44

System.Random文档 (第一段)中,它的内容如下:

默认的种子值是从系统时钟导出的,并且具有有限的分辨率。因此,通过调用默认构造函数而连续创建的不同随机对象将具有相同的缺省种子值,因此将产生相同的随机数集。通过使用单个随机对象生成所有随机数,可以避免这个问题。您还可以修改系统时钟返回的种子值,然后显式地将这个新的种子值提供给随机(Int32)构造函数。有关更多信息,请参见随机(Int32)构造函数。

这可能是对代码中正在发生的事情的最好解释。

如果您单步执行您的程序,则会有更多的时间流逝,种子也会不同,因此您获得的字符串也会不同。如果您只是运行程序,种子是完全相同的,因为行被执行没有太多的延迟。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29431165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档