索引数组外的边界C#

时间:2013-11-25 09:45:29

标签: c# arrays

我正在尝试用数组简化一些长语句,我在这里发现了类似的问题,但我无法解决我出错的地方。代码如下:

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;工作正常,但只有单位选择不起作用,谢谢你能够提供帮助。

5 个答案:

答案 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元素。 :)