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

Ted*_*Ted 1 c# breakpoints visual-studio-2012

我有以下代码生成随机数,以在条形图上绘制.但是,只有在特定行上设置了断点时,它才能正常工作,否则,所有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;
Run Code Online (Sandbox Code Playgroud)

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

use*_*541 6

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

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

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

如果你查看Random类的文档,你会看到以下行:

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

解决方案是:

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