Подтвердить что ты не робот

Разница между array.GetLength(0) и array.GetUpperBound(0)

В чем разница между этими двумя методами и когда вы используете один вместо другого?

int[,] array = new int[4,3];
int length0 = array.GetLength(0);
int upperbound0 = array.GetUpperBound(0);

MSDN говорит, что GetLength возвращает число элементов, где GetUpperBound определяет максимальный индекс, но как это может быть иначе, поскольку массивы инициализируются элементами для каждого индекса?

4b9b3361

Ответ 1

Взгляните на этот (редко используемый) метод. Из документов:

public static Array CreateInstance(Type elementType, int[] lengths, int[] lowerBounds)

Создает многомерный массив заданных типов и размерных длин с указанными нижними границами.

С его помощью вы можете создать массив с индексами из -5... +5. Если вы когда-либо используете такой массив, то GetUpperBound() внезапно становится намного более полезным, чем GetLength()-1. Также существует GetLowerBound().

Но поддержка С# для такого типа массивов низкая, вы не можете использовать []. Эти методы вам понадобятся только в сочетании с методами Array.GetValue() и SetValue().

Ответ 2

Array.Length возвращает длину массива (количество элементов), которое вам нужно вычесть 1 из него, чтобы получить UpperBound.

Array.GetUpperBound(0) возвращает верхнюю границу массива, вы можете использовать ее как есть.

Ответ 3

GetUpperBound возвращает наивысший индекс в массиве, GetLength возвращает количество элементов массива.

то есть. GetUpperBound = GetLength - 1

Ответ 4

Как правило, array.GetUpperBound(0) = array.Length - 1, но поскольку мы можем создавать массивы, имеющие нижнюю границу, отличную от нуля, это не всегда верно.

Ответ 5

если нижняя граница вашего массива равна 0, вы можете использовать любой из них без какой-либо путаницы, но я бы рекомендовал array.length-1, поскольку он широко используется. однако, если нижняя граница вашего массива меньше 0, вы должны использовать array.GetUpperBound(0), потому что в этом случае array.length-1!= array.getUpperBound(0)