2013-11-25 103 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

嘿嘿...當我打字的人張貼。必須提高打字速度。 :) –

相關問題