c#程序只能用于插入断点

时间:2013-07-08 15:21:30

标签: c# visual-studio-2012 breakpoints

我有以下代码生成随机数,以便在条形图上绘制。但是,只有在特定行上设置了断点时,它才能正常工作,否则,所有10个新数据点都会以完全相同的数字出现。

case 3:
                //Add ten data sets to go through all default colors
                DatasetPairing<BarPresentation, BarGraphDataset<GraphableDouble>> datasetPairing;

                foreach (HorizontalBarPlotter<GraphableDouble, GraphableDouble> graphPlotter in this.Data.GraphPlots)
                {
                    for (int i = 1; i <= 11; i++)
                    {
                        datasetPairing = new DatasetPairing<BarPresentation, BarGraphDataset<GraphableDouble>>();
                        datasetPairing.DatasetPresentation = new BarPresentation();
                        datasetPairing.GraphableDataset = GetOneDataset(0, false);
                        graphPlotter.DatasetMap.Add(datasetPairing); //breakpoint set here
                    }
                    List<IAxis> xAxes;
                    xAxes = new List<IAxis>();
                    xAxes.Add(graphPlotter.DetermineXAxis());
                    this.Data.BottomAxes = xAxes;
                    this.Data.TopAxes = xAxes;
                }
                NextStep = "Return to a single dataset and add comment to values for tooltips";
                break;

我不知道为什么会这样,我之前从未听说过这样的问题......也许这是视觉工作室的一个错误?任何帮助将不胜感激

3 个答案:

答案 0 :(得分:6)

没有真正的随机数,你只有伪随机数。随机数的创建基于通常是当前时间的种子。

如果您每次想要一个新的随机数时创建一个新对象,它将是相同的数字,因为时间没有改变。 (记得当你运行应用程序时,一切都在不到一毫秒的时间内发生 - 当你调试应用程序时,在创建2个新的随机变量之间有一段时间,因此随机数是不同的)

您应该使用一个对象来创建所有随机数,并使用Random.Next()来获取新的随机值。

如果您查看Random类的documentation,您将看到以下行:

  

由a紧密连续创建的不同随机对象   对默认构造函数的调用将具有相同的默认种子   值

解决方案是:

  

使用单个Random对象生成所有随机数可以避免此问题。您还可以通过修改系统时钟返回的种子值,然后将此新种子值显式提供给Random(Int32)构造函数来解决此问题。

答案 1 :(得分:0)

我怀疑您用来创建随机点的方法使用Random.Next()。如果快速连续调用它,它可以返回相同的值。使用Thread.Sleep()添加延迟可能是值得的。

答案 2 :(得分:0)

如果您正在使用Random类,请确保每次都不创建新对象。

来自msdn

using the parameterless constructor to create different Random objects in close succession creates random number generators that produce identical sequences of random numbers. This problem can be avoided by creating a single Random object rather than multiple ones.

我通常会创建一个单独的静态随机对象,并且总是将其用于随机数,这样就不会有重复项