OriginalGriff
Чтобы добавить к сказанному Риком, индексы массивов в C# запускаются с нуля, поэтому пятиэлементный массив под названием "a" будет иметь пять допустимых индексов:
a[0]
a[1]
a[2]
a[3]
a[4]
Любое другое значение (например, 5 или более, или любое отрицательное значение вообще) является недопустимым, и вы получите сообщение об ошибке - оно находится вне диапазона, диапазон которого составляет от 0 до 4 включительно.
Но длина массива по понятным причинам также начинается с 0: пустой массив без элементов имеет длину 0 (и никаких допустимых значений для его индекса), а массив с одним элементом имеет длину 1 (и только один допустимый индекс: 0), два элемента означают длину 2 (и два индекса: 0 и 1), ... а массив с пятью элементами имеет длину 5 (только индексы 0, 1, 2, 3, 4).
Итак, когда ваш цикл выполняется от 0 до длины включительно:
int a = 0;
while (a <= numbers.Length)
...
Тогда индексы, которые вы пытаетесь использовать, являются 0, 1, 2, 3, 4, ... и 5. Последний всегда выдает ошибку, потому что в пятиэлементном массиве есть только пять значений и пять допустимых индексов: 0, 1, 2, 3 и 4.
Вот почему вы почти всегда видите "<" в коде защиты цикла и почти никогда "<="
В этом есть смысл?