我正在尝试用数组简化一些长语句,我在这里发现了类似的问题,但我无法解决我出错的地方。代码如下:
if (coursechoice.Text == ("Subsidiary Diploma"))
{
var grade = new[] { grade1, grade2, grade3, grade4, grade5, grade6, grade7, grade8, grade9, grade10, grade11, grade12, grade13, grade14, grade15, grade16, grade17, grade18 };
var unitselect = new[] { unitselect1, unitselect2, unitselect3, unitselect4, unitselect5, unitselect6, unitselect7, unitselect8, unitselect9, unitselect10, unitselect11, unitselect12, unitselect13, unitselect15, unitselect16, unitselect17, unitselect18 };
for (var i = 3; i < 18; i++)
{
grade[i].Enabled = false;
unitselect[i].Enabled = false; // I get index out of bounds of the array here
}
代码grade[I].Enabled= false;
工作正常,但只有单位选择不起作用,谢谢你能够提供帮助。
答案 0 :(得分:13)
Unitselect仅包含17个项目,没有unitselect14
。
答案 1 :(得分:4)
我不确定你对循环逻辑的意图是什么,但是因为你正在使用一个数组(实现IEnumerable),你可能最好使用LINQ来解决你的问题。
示例:
grade.Skip(4).Take(15).ToList().ForEach(g => g.Enabled = false);
Linq docs:http://msdn.microsoft.com/en-us/library/vstudio/bb397926.aspx
更新
根据@ Gusdor的评论,标准的foreach循环会更好。
foreach(var g in grade.Skip(4).Take(15)) {
g.Enabled = false;
}
答案 2 :(得分:1)
数组索引从零开始你在unitselect数组中有17个元素,所以应该是
for (var i = 3; i < 17; i++)
答案 3 :(得分:1)
错误意味着在这种特定情况{2}中,2个数组中的元素数量不同。最终for循环命中i的某个值超过了数组的长度。
答案 4 :(得分:1)
你错过了数组中的unitselect14元素。 :)