Luke h
Luke h

Reputation: 337

Index outside bounds of the array C#

I'm trying to simplify a few long statements with arrays, I've found similar questions on here but I can't work out where i'm going wrong. The code is as follows:

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
}   

The code grade[I].Enabled= false; works fine, however its only the unitselect which doesn't work, thanks if you are able to help.

Upvotes: 2

Views: 365

Answers (5)

Mikael &#214;stberg
Mikael &#214;stberg

Reputation: 17156

I'm not sure what your intention is with the loop logic, but since you are working with an array (which implements IEnumerable), you may be better off solving your problem using LINQ.

Example:

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

Linq docs: http://msdn.microsoft.com/en-us/library/vstudio/bb397926.aspx

Update

As per @Gusdor's comment, a standard foreach loop would be better.

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

Upvotes: 4

Ashish Charan
Ashish Charan

Reputation: 2387

You missed unitselect14 element in the array. :)

Upvotes: 1

Coding Flow
Coding Flow

Reputation: 21881

The error would imply you have a different number of elements in the 2 arrays in this specific case unitselect[]. Eventually the for loop hits some value of i that exceeds the length of the array.

Upvotes: 1

Nitin Varpe
Nitin Varpe

Reputation: 10694

array index starts from zero u have 17 element in unitselect array so for should be

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

Upvotes: 1

Jason
Jason

Reputation: 3689

Unitselect contains only 17 items, there is no unitselect14.

Upvotes: 13

Related Questions