I have a class like this:
class MyClass { public object[] Values; }
Somewhere else I'm using it:
MyClass myInstance = new MyClass() {Values = new object[]{"S", 5, true}};
List<Func<MyClass, object>> maps = new List<Func<MyClass, object>>();
for (int i = 0; i < myInstance.Values.Length ; i++)
{
maps.Add(obj => obj.Values[i]);
}
var result = maps[0](myInstance); //Exception: Index outside the bounds of the array
I thought it will returns S
, but it throw exception. Any idea what is going on?
U are accessing an empty array with some index greater than zero, it returns this error. Solution : Check the array count before you access it through index !
The ArrayIndexOutOfBoundsException is one of the most common errors in Java. It occurs when a program attempts to access an invalid index in an array i.e. an index that is less than 0, or equal to or greater than the length of the array.
Solutions to Prevent IndexOutOfRangeException Solution 1: Get the total number of elements in a collection and then check the upper bound of a collection is one less than its number of elements. Solution 2: Use the try catch blocks to catche the IndexOutOfRangeException .
IndexOutOfRangeException occurs when you try to access an element with an index that is outsise the bounds of the array.
To see what's going on, change your lambda to maps.Add(obj => i);
.
With that change result
will be 3
, and that's why you're getting IndexOutOfBoundException
exception: you're trying to get myInstance[3]
which does not exist.
To make it work, add local int
variable within your loop and use that one as index instead of loop counter i
:
for (int i = 0; i < myInstance.Values.Length; i++)
{
int j = i;
maps.Add(obj => obj.Values[j]);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With