2013-11-25 64 views
2

我试图简化几个与数组长的声明,我在这里发现了类似的问题,但我无法弄清楚我哪里出错了。代码如下:数组的边界索引C#

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;工作正常,但其只是不工作unitselect,感谢代码。

+1

unitselect14 is missing –

+0

你错过了'unitselect14' – AbZy

回答

13

Unitselect只包含17个项目,没有unitselect14

+1

谢谢,我不能相信我忽略了一句话,haha –

+2

+11,你不会每天都这样! :)对于'Foreach'来说 – Liam

4

我不确定你的循环逻辑有什么意图,但是因为你正在处理一个数组(它实现了IEnumerable),所以你最好用LINQ来解决你的问题。

例子:

grade.Skip(4).Take(15).ToList().ForEach(g => g.Enabled = false); 

LINQ的文档:http://msdn.microsoft.com/en-us/library/vstudio/bb397926.aspx

更新

按@ Gusdor的评论,一个标准的foreach循环会更好。

foreach(var g in grade.Skip(4).Take(15)) { 
    g.Enabled = false; 
} 
+1

-1。您正在为使用此方法的唯一目的创建一个新列表,然后抛弃该对象。没有理由避免传统的'foreach',它与'IEnumerable'有更大的关联性。 'foreach(var g in grade.Skip(4).Take(15)){g.Enabled = false; }'。对于那些保持计数的人物也少一些:P – Gusdor

+3

只是我的两个peneth,我不认为.ForEach本身就是linq。它是List 类中的实例方法。 –

+1

这是否真的回答了这个问题? OP是否知道他的错误在哪里?我在想不。 – Liam

1

数组索引从零开始u有17元件在unitselect阵列所以应该是

 for (var i = 3; i < 17; i++) 
+0

布施巴里! –

+0

Ithehi aahes ka tu kahar ahes tu !!! –

+0

哈哈哈!!! :D :) –

1

该错误将意味着你有在该特定情况下unitselect[]不同数目在2个阵列元素的。最后,for循环命中了超过数组长度的i值。

1

您错过了数组中的unitselect14元素。 :)

+0

这个答案有点慢。 Everone几年前也说过同样的事情。 – Liam

+0

嘿嘿...当我打字的人张贴。必须提高打字速度。 :) –

相关问题