不明白的数组越界?数组的游标总是莫名的比数组大小大一

阳光宅猿 2017-07-20 09:46:45
代码 如下:
for (var i = 0; i < datasInfo.Count; i++)
{
WriteLog("第" + (i + 1) + "组数据" + "开始下载");
Console.WriteLine("第" + (i + 1) + "组数据" + "开始下载");
string path = PATH + datasInfo[i].CreatedBy + "\\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
WriteLog(datasInfo[i].CreatedBy.ToString());
Console.WriteLine(datasInfo[i].CreatedBy.ToString());
WriteLog(datasInfo[i].Uri.ToString());
Console.WriteLine(datasInfo[i].Uri.ToString());
WriteLog(datasInfo[i].Filename.ToString());
Console.WriteLine(datasInfo[i].Filename.ToString());
// 这里出现了很多次一场,就是那种数组越界的那种
// 不明白为什么会出现数组越界???
Console.WriteLine(i);
Task.Run(() => downs(datasInfo[i].Uri.ToString(), path + datasInfo[i].Filename.ToString()));
// downs(datasInfo[i].Uri.ToString(), path + datasInfo[i].Filename.ToString());
//路径应该设置为用户注册邮箱,设想:重新查询后,对文件夹进行重命名
}
...全文
610 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
白衣如花 2017-08-09
  • 打赏
  • 举报
回复
要不用foreach? Task.Run(() => downs(datasInfo[i].Uri.ToString(), path + datasInfo[i].Filename.ToString()));改成 var url = datasInfo[i].Uri.ToString(); var file = path + datasInfo[i].Filename.ToString(); Task.Run(() => downs(url, file); 再试试?
异类丶 2017-08-09
  • 打赏
  • 举报
回复
datasInfo.Count-1 你不-1 数组不越界才怪。
异类丶 2017-08-09
  • 打赏
  • 举报
回复
i.count-1 你从0开始 肯定要-1的啊 。
阳光宅猿 2017-07-30
  • 打赏
  • 举报
回复
引用 13 楼 闭包客的回复:
你注释的位置不是数组越界出错的位置,如果是数组越界,出错位置会更靠前。
可是异常出现的位置就是这呢
阳光宅猿 2017-07-30
  • 打赏
  • 举报
回复
引用 9 楼 以专业开发人员为伍的回复:
如果说有问题,通常就是 Task.Run(() => downs(datasInfo[i].Uri........ 这里的变量 i 一看就是有问题的。但是跟你说的问题无关。 拿着这类代码问,可见缺少测试驱动基本方法。
大神有什么好的方法建议??求指导
阳光宅猿 2017-07-30
  • 打赏
  • 举报
回复
引用 8 楼 以专业开发人员为伍的回复:
你们有没有运行测试程序?测试中是在顺序测试还是并发测试中发现的问题? 如果只是跑起来所有功能然后手工“点点点”发现的问题,那么应该首先按照正规的工程方法创建一个测试工程,在有目标的情况下自动化地找到问题(而不是拿到生产环境去碰)。
运行了,在实际中越界了
xuzuning 2017-07-30
  • 打赏
  • 举报
回复
给出完整的错误信息,不要自己解释的
闭包客 2017-07-21
  • 打赏
  • 举报
回复
你注释的位置不是数组越界出错的位置,如果是数组越界,出错位置会更靠前。
闭包客 2017-07-21
  • 打赏
  • 举报
回复
数组越界会抛出 IndexOutOfRangeException 异常,你需要确认一下。
异类丶 2017-07-21
  • 打赏
  • 举报
回复
int i=1
  • 打赏
  • 举报
回复
循环完后i变成1725是对的,因为最后一次加完再判断小于Count时会不满足判断退出循环 除非你这个代码不是你实际代码,否则你这个代码没动过集合,是没有你说的问题的
xdashewan 2017-07-20
  • 打赏
  • 举报
回复
downs里面做了什么,不启动task测试有问题吗
exception92 2017-07-20
  • 打赏
  • 举报
回复
数组的游标是从0开始的,只能比数组的大小小啊。 Debug 模式调试看看
阳光宅猿 2017-07-20
  • 打赏
  • 举报
回复
数组的大小为1725,然后那个i总是会变成1725,按道理应该到1724就行了呀
ilikeff8 2017-07-20
  • 打赏
  • 举报
回复
执行task.run前,
int j=i;
然后在run里用j
  • 打赏
  • 举报
回复
你的代码的 i 值会看起来异常,但是并不应该是什么 1025,而应该是其它的异常。所以你这个描述问题的方法,就更难让别人来判断了。
引用 6 楼 u012401478 的回复:
你i+1最后一条就是1725条数据,对哒
lz 的意思应该是循环体内部的时候 i 值>= datasInfo.Count。
  • 打赏
  • 举报
回复
如果说有问题,通常就是 Task.Run(() => downs(datasInfo[i].Uri........ 这里的变量 i 一看就是有问题的。但是跟你说的问题无关。 拿着这类代码问,可见缺少测试驱动基本方法。
  • 打赏
  • 举报
回复
你们有没有运行测试程序?测试中是在顺序测试还是并发测试中发现的问题? 如果只是跑起来所有功能然后手工“点点点”发现的问题,那么应该首先按照正规的工程方法创建一个测试工程,在有目标的情况下自动化地找到问题(而不是拿到生产环境去碰)。
Anonymous477 2017-07-20
  • 打赏
  • 举报
回复
改为用foreach,还越界就是其他地方的问题了。
好的哦 2017-07-20
  • 打赏
  • 举报
回复
你i+1最后一条就是1725条数据,对哒
加载更多回复(1)

110,538

社区成员

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

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

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