Getupperbound c что это
GetUpperBound() Method is used to find the index of the last element of the specified dimension in the array.
Syntax:
Here, dimension is a zero-based dimension of the array whose upper bound needs to be determined.
Return Value:The return type of this method is System.Int32. This method returns the index of the last element of the specified dimension in the array Or -1 if the specified dimension is empty.
Exception: This method will give IndexOutOfRangeException if the value of dimension is less than zero, or equal or greater than Rank.
Note: GetUpperBound(0) returns the last index in the first dimension of the array, and GetUpperBound(Rank – 1) returns the last index of the last dimension of the array. This method is an O(1) operation.
Below programs illustrate the use of GetUpperBound() Method:
GetUpperBound() and GetLowerBound() function for array
Can anyone please tell what does the two functions do? They take an integer argument which is told to be dimension. But how does the value of this integer changes the output?
Below is an example which I ran.
Any idea why GetLowerBound() is always returning 0? If this always returns 0 then why do we need to call this method?
![]()
3 Answers 3
May be some examples make the topic clear for you
We use GetUpperBound() to find out the upper bound of an array for given dimension, like that:
usually, GetLowerBound() returns 0, since arrays are zero-based by default, but in some rare cases they are not:
Typical loop using GetLowerBound and GetUpperBound is
![]()
The integer parameter to GetUpper/LowerBound() specifies the dimension.
Whilst arrays defined within C# have lower bound = 0 and upper bound = length — 1, arrays from other sources (e.g. COM interop) can have different bounds, so those working with Excel interop for example will be familiar with arrays that have lower bound = 1, upper bound = length.
Can anyone please tell what does the two functions do?
It is written in their MSDN pages. They gets the index of the first / last element of the specified dimension in the array. Take a look Array.GetUpperBound and Array.GetLowerBound
They take an integer argument which is told to be dimension.
Any idea why GetLowerBound() is always returning 0? If this always returns 0 then why do we need to call this method?
In an array, every dimension can have their specific lower and uppor bounds. So, this methods can create different results for each dimension of array.
Note that, although most arrays in the .NET Framework are zero-based (that is, the GetLowerBound method returns zero for each dimension of an array), the .NET Framework does support arrays that are not zero-based. Such arrays can be created with the CreateInstance(Type, Int32\[\], Int32\[\]) method, and can also be returned from unmanaged code.
Массивы
Массив – именованная структура данных, фиксированного размера, которая позволяет хранить, последовательность однотипных элементов, к которым можно обращаться с помощью индекса.
С# поддерживает следующие типы массивов:
- одномерные;
- ступенчатые или зубчатые;
- многомерные.
Одномерные массивы
Одномерный, или линейный массив – это конструкция фиксированной длины из набора элементов наперед заданного типа, доступ к которым осуществляется с использование одного индекса. Его можно рассматривать как вектор:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Синтаксис объявления массива, похожий на создание переменной, только после типа указываются квадратные скобки:
Пример объявления целочисленного массива:
В языке C#, сам массив имеет ссылочный тип данных, это значит, что после объявления переменной типа массив, выделяется память, только для хранения ссылки на экземпляр массива, при этом значение переменной равно null. Для создания экземпляра массива, и выделения памяти для хранения элементов, необходимо использовать оператор new.
Для создания массива используется следующий синтаксис:
Присвоим, предварительно созданной, переменной массив из десяти элементов:
При этом все элементы массива будут иметь тип int и значения по умолчанию для этого типа данных — 0.
Массивы, подобно переменным, поддерживают инициализацию, для этого используется массив-литерал. В C#, можно инициализировать массив несколькими вариантами, которые равнозначны для компилятора:
В первых трех вариантах, можно использовать var вместо int[].
Для доступа к элементам массива, используются индексы, при этом начальный индекс равен нулю, соответственно последний индекс на единицу меньше длины массива.
Длину одномерного массива, можно получить из поля Length.
Обычно для работы с массивами, используются циклы. Рассмотрим пример заполнения и вывода, на экран консоли, данных массива:
Как было описано выше массив в C#, имеет ссылочный тип(reference type), не путать с типом элементов. Это значит, что в переменной с названием массива, хранится ссылка на экземпляр, а не сами данные. Это нужно учитывать при работе с массивами.
Рассмотрим ситуацию, когда нужно скопировать данные одного целочисленного массива в другой.
В случае с переменными примитивных типов данных, мы могли записать копирование следующим образом:
Если применить эту логику работы к массивам, то получим:
Во второй строке кода, мы присваиваем переменной b ссылку на те самые данные, на которые указывает переменная a, то есть по факту у нас есть один набор элементов, а на него ссылаются две переменные. Если не учитывать этот факт, то в итоге мы получим ошибки в данных, которые иногда трудно отследить.
Для создания физической копии массива, можно воспользоваться следующим синтаксисом:
Кроме этого класс Array предоставляет нам возможность создать копию массива, вызовом метода Copy:
Ступенчатый массив
Тип данных массива может быть любым, по этому мы можем создать массив массивов, разной размерности, именно такая структура носит название – ступенчатый или зубчатый массив.
Для создания ступенчатого массива используется такой синтаксис:
Он имеет следующий вид:
| 1 | 2 | 3 | 4 | ||||
| 1 | 2 | 3 | 4 | 5 | |||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
Для обращения к элементу, используются два индекса:
Используя вложенные циклы, можно осуществлять обход всех элементов зубчатого массива:
Многомерные массивы
Для многомерных массивов характерным есть ранг(rank), или количество измерений. Двумерный массив – это таблица, трехмерный – куб…
Поскольку на практике мало используются массивы размерностью больше двух, дальше мы будем рассматривать только двухмерные массивы.
Создание двумерного массива можно записать следующим образом(все варианты равнозначны)::
В первых трех вариантах, вместо int[,] можно использовать var.
Каждый из созданных двумерных массивов имеет вид:
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
Доступ к элементам осуществляется посредством двух индексов:
Цикл foreach может обходить все элементы двумерного массива, а использование других циклов немного усложняется, из за того, что поле Length содержит в себе общую длину массива.
Для получения количества строк и столбцов, используют метод GetUpperBound, который возвращает значение последнего индекса, для переданного в качестве аргумента, измерения. Поскольку как результат мы получаем индекс, для получения длину, значение нужно увеличить на единицу:
- Количество строк – GetUpperBound(0) + 1;
- Количество столбцов – GetUpperBound(1) + 1.
Рассмотрим пример заполнения и вывода значений двумерного массива:
Как видим, цикл foreach выводит все элементы двумерного массива.
Многомерные массивы могут быть подмассивами одномерных, или многомерных массивов, однако такие конструкции усложняют работу с данными, по этому практически не используются.
Итоги
К основным характеристикам массивов относятся:
- Размерность или ранг – количество индексов, с помощью которых обращаются к элементу(одномерные, двумерные, трехмерные…);
- Размер или длина массива – общее количество элементов в массиве;
- Размерность каждого измерения – длина отдельно взятого измерения массива(для двухмерного – количество строк и столбцов).
В большинстве случаев используются одномерные и двумерные массивы. Переменная массива, не зависимо от типа данных её элементов, имеет ссылочный тип, помните это при работе с массивами.
Getupperbound c что это
This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.
![]()
- ProfileText
- Sign in
Asked by:
General discussion
What is the use of GetUpperBound(0)? I saw some articles over internet but
i am getting confused with each article.
Someone please elaborate in simple way.
All replies
GetUpperBound returns the highest indices of the last element in an array.
You can check out the MSDN docs at:
If, for example, you have a multimensional array:
a.GetUpperBound(0) would return 1 (the array can contain 2 items with indices 0 and 1)
a.GetUpperBound(1) would return 2 (the array can contain 3 items with indices 0, 1 and 2)
a.GetUpperBound(2) would return 3 (the array can contain 4 items with indices 0, 1, 2 and 3)
So, GetUpperBound() returns the index of the last element for the arrays specified dimension: 1, 2 and 3 respectively in the above example.