【发布时间】:2017-12-16 15:01:53
【问题描述】:
确切的错误:
索引超出范围。必须为非负数且小于集合的大小。
我无数次索引数组和列表。我已经无数次使用带有数组和列表的循环。数据在那里,它有效。除非我尝试为我的函数创建任务。请注意,我使用 foreach 循环成功地做到了这一点,以实现类似的功能;这个新的需要两个参数,所以我不能正确使用 foreach 循环。至少我认为我做不到。
这是错误的代码:
if (addressList != null) {
textBox1.Text += ("Address List Length: " + addressList.Count + Environment.NewLine);
for (int i = 0; i < addressList.Count; i++) {
textBox1.Text += ("Task for " + addressList[i] + ":" + portList[i] + " initiated." + Environment.NewLine);
Task.Factory.StartNew(() => PingTaskAdapted(addressList[i], portList[i]));
}
}
else textBox1.Text = ("No IPs have been added.");
假设 addressList[0] 是 google.com,portList[0] 是 80,
输出:
Address List Length: 1
Task for google.com:80 initiated.
然后程序中断,Visual Studio 告诉我在 PingTaskAdapted() 我调用了一个超出范围的索引,而实际上它只是打印了有问题的索引,因为它们存在。
为了清楚起见,如果我打电话给PingTaskAdapted(addressList[0], pingList[0]);,它可以正常工作。
【问题讨论】:
-
你应该使用
Enumerable.Zip。
标签: c# lambda task indexoutofboundsexception indexoutofrangeexception