Разница между 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 определяет максимальный индекс, но как это может быть иначе, поскольку массивы инициализируются элементами для каждого индекса?
Ответы
Ответ 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)