c# wpf

qq_37622820 2017-12-16 03:53:59
我在窗体写了个循环 循环条件都false了 其他都正常 就这句话老报错
datesDataSource.SetXMapping(x => dateAxisList[asd].ConvertToDouble(x));
理由是超出索引范围 我很蛋疼不知道哪错了 我这个画折线图定义横坐标的话,不加这句话正常,一加这句话就报错,都是在循环里这句话为什么会多运行呢
...全文
226 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ourhouzi 2017-12-23
  • 打赏
  • 举报
回复
引用 5 楼 qq_37622820 的回复:
[quote=引用 2 楼 ourhouzi 的回复:] 条件是false 这句话应该不会被执行,你给的代码太少 无法判断。 SetXMapping这个函数一般函数是设置一种映射关系,表示X的值数据的关系,这种关系只要设置一次就好了,不需要在循环里面。
我是要循环创建40个 for (int q = 0; q < 40; q++) { ObservableDataSource<Point> dataSource = new ObservableDataSource<Point>(); ObservableDataSource<Point> dataSource1 = new ObservableDataSource<Point>(); List<DateTime> vardatetime = new List<DateTime>(); CompositeDataSource compositeDataSource = null; CompositeDataSource compositeDataSource1 = null; EnumerableDataSource<DateTime> datesDataSource = null; EnumerableDataSource<double> pointnet1 = null; EnumerableDataSource<double> pointnet2 = null; LineGraph graphnet1 = new LineGraph(); LineGraph graphnet2 = new LineGraph(); .................. datesDataSource.SetXMapping(x => dateAxisList[asd].ConvertToDouble(x)); pointnet1 = new EnumerableDataSource<double>(yList); pointnet1.SetYMapping(y => y); pointnet1List.Add(pointnet1); pointnet2 = new EnumerableDataSource<double>(yList1); pointnet2.SetYMapping(y => y); pointnet2List.Add(pointnet2); compositeDataSource = new CompositeDataSource(datesDataSource, pointnet1); compositeDataSource1 = new CompositeDataSource(datesDataSource, pointnet2); compositeDataSourceList.Add(compositeDataSource); compositeDataSourceList1.Add(compositeDataSource1); graphnet1 = cpList[iop].AddLineGraph(compositeDataSource, Colors.Black, 1, "net1"); graphnet2 = cpList[iop].AddLineGraph(compositeDataSource1, Colors.Red, 1, "net2"); grahnet1List.Add(graphnet1); grahnet2List.Add(graphnet2); cpList[iop].Viewport.FitToView(); } 在循环里创建40个 每次都用新的 然后当q=40时 条件是false;其他语句都不执行就datesDataSource.SetXMapping(x => dateAxisList[asd].ConvertToDouble(x));话多执行了一次[/quote] 首先q=40 下面的代码肯定不会执行 包括你说的那句话 ,也就是说你报错的时候q 不会是你说的 等于40,其次你说的报错的那句代码里面是asd 下标越界跟q没有关系,你提供的代码里面看不出你的asd 是怎么来的。
qq_37622820 2017-12-21
  • 打赏
  • 举报
回复
引用 3 楼 weixin_38424791 的回复:
超出索引值范围一般都是由于你的下标越界了,使你读取数据时多读取了一个不存在的数据,造成了异常
这个我知道啊 关键的问题是 循环都结束了,为什么在循环里的这句话还会运行
qq_37622820 2017-12-21
  • 打赏
  • 举报
回复
我是要循环创建40个 for (int q = 0; q < 40; q++) { ObservableDataSource<Point> dataSource = new ObservableDataSource<Point>(); ObservableDataSource<Point> dataSource1 = new ObservableDataSource<Point>(); List<DateTime> vardatetime = new List<DateTime>(); CompositeDataSource compositeDataSource = null; CompositeDataSource compositeDataSource1 = null; EnumerableDataSource<DateTime> datesDataSource = null; EnumerableDataSource<double> pointnet1 = null; EnumerableDataSource<double> pointnet2 = null; LineGraph graphnet1 = new LineGraph(); LineGraph graphnet2 = new LineGraph(); .................. datesDataSource.SetXMapping(x => dateAxisList[asd].ConvertToDouble(x)); pointnet1 = new EnumerableDataSource<double>(yList); pointnet1.SetYMapping(y => y); pointnet1List.Add(pointnet1); pointnet2 = new EnumerableDataSource<double>(yList1); pointnet2.SetYMapping(y => y); pointnet2List.Add(pointnet2); compositeDataSource = new CompositeDataSource(datesDataSource, pointnet1); compositeDataSource1 = new CompositeDataSource(datesDataSource, pointnet2); compositeDataSourceList.Add(compositeDataSource); compositeDataSourceList1.Add(compositeDataSource1); graphnet1 = cpList[iop].AddLineGraph(compositeDataSource, Colors.Black, 1, "net1"); graphnet2 = cpList[iop].AddLineGraph(compositeDataSource1, Colors.Red, 1, "net2"); grahnet1List.Add(graphnet1); grahnet2List.Add(graphnet2); cpList[iop].Viewport.FitToView(); }
qq_37622820 2017-12-21
  • 打赏
  • 举报
回复
引用 2 楼 ourhouzi 的回复:
条件是false 这句话应该不会被执行,你给的代码太少 无法判断。 SetXMapping这个函数一般函数是设置一种映射关系,表示X的值数据的关系,这种关系只要设置一次就好了,不需要在循环里面。
我是要循环创建40个 for (int q = 0; q < 40; q++) { ObservableDataSource<Point> dataSource = new ObservableDataSource<Point>(); ObservableDataSource<Point> dataSource1 = new ObservableDataSource<Point>(); List<DateTime> vardatetime = new List<DateTime>(); CompositeDataSource compositeDataSource = null; CompositeDataSource compositeDataSource1 = null; EnumerableDataSource<DateTime> datesDataSource = null; EnumerableDataSource<double> pointnet1 = null; EnumerableDataSource<double> pointnet2 = null; LineGraph graphnet1 = new LineGraph(); LineGraph graphnet2 = new LineGraph(); .................. datesDataSource.SetXMapping(x => dateAxisList[asd].ConvertToDouble(x)); pointnet1 = new EnumerableDataSource<double>(yList); pointnet1.SetYMapping(y => y); pointnet1List.Add(pointnet1); pointnet2 = new EnumerableDataSource<double>(yList1); pointnet2.SetYMapping(y => y); pointnet2List.Add(pointnet2); compositeDataSource = new CompositeDataSource(datesDataSource, pointnet1); compositeDataSource1 = new CompositeDataSource(datesDataSource, pointnet2); compositeDataSourceList.Add(compositeDataSource); compositeDataSourceList1.Add(compositeDataSource1); graphnet1 = cpList[iop].AddLineGraph(compositeDataSource, Colors.Black, 1, "net1"); graphnet2 = cpList[iop].AddLineGraph(compositeDataSource1, Colors.Red, 1, "net2"); grahnet1List.Add(graphnet1); grahnet2List.Add(graphnet2); cpList[iop].Viewport.FitToView(); } 在循环里创建40个 每次都用新的 然后当q=40时 条件是false;其他语句都不执行就datesDataSource.SetXMapping(x => dateAxisList[asd].ConvertToDouble(x));话多执行了一次
ourhouzi 2017-12-16
  • 打赏
  • 举报
回复
SetXMapping 表示一种约定 而不是赋值
weixin_38424791 2017-12-16
  • 打赏
  • 举报
回复
超出索引值范围一般都是由于你的下标越界了,使你读取数据时多读取了一个不存在的数据,造成了异常
ourhouzi 2017-12-16
  • 打赏
  • 举报
回复
条件是false 这句话应该不会被执行,你给的代码太少 无法判断。 SetXMapping这个函数一般函数是设置一种映射关系,表示X的值数据的关系,这种关系只要设置一次就好了,不需要在循环里面。
xuzuning 2017-12-16
  • 打赏
  • 举报
回复
j检查 asd 的值

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧