- •Доступ к элементам массива
- •Многомерные массивы
- •Зубчатые массивы
- •Класс Array
- •Создание массивов
- •Копирование массивов
- •Сортировка
- •Массивы в качестве параметров
- •Ковариантость массивов
- •Перечисления
- •Интерфейс iEnumerator
- •Оператор foreach
- •Оператор yield
- •Различные способы итерации по содержимому коллекций
- •Возврат перечислителей посредством yield return
- •Кортежи
- •Структурное сравнение
- •If (t1.Equals(t2)) Console.WriteLine("одинаковое содержимое");
Класс Array
Объявление массива с квадратными скобками это нотация C# для использования класса Array. Такой синтаксис C# приводит к созданию “за кулисами” нового класса, унаследованного от абстрактного базового класса Array. Таким образом, методы и свойства, определенные в классе Array, можно использовать с любым массивом С#. Например, вы уже применяли свойство Length и итерацию по элементам с помощью оператора foreach. В этом случае используется метод GetEnumerator() класса Array.
В классе Array реализованы и другие свойства: LongLength для массивов, в которых количество элементов не помещается в обычное, целое, и Rank для получения количества измерений. Давайте взглянем на другие члены класса Array, попробовав поддерживаемые им возможности.
Создание массивов
Класс Array является абстрактным, поэтому создать массив с использованием какого-либо конструктора нельзя. Однако вместо применения синтаксиса C# для создания экземпляров массивов также возможно создавать их с помощью статического метода Createlnstance (). Это исключительно удобно, когда заранее не известен тип элементов массива, поскольку тип можно передать методу Createlnstance() в параметре как объект Туре.
В следующем примере демонстрируется создание массива типа int размером 5. Первый аргумент метода Createlnstance() требует тип элементов, а второй определяет размер. Для установки значений служит метод SetValue(), а для их чтения метод GetValue().
Array intArray1 = Array.Createlnstance (typeof (int), 5) ;
for (int i = 0;- i < 5; i++)
{
intArray1.SetValue(33, i);
}
for (int i = 0; i < 5; i++)
{
Console.WriteLine(intArray1.GetValue(i));
}
Созданный массив можно также привести к типу массива, объявленного как int[]:
int[] intArray2 = (int[])intArray1;
Метод Createlnstance() имеет множество перегрузок для создания многомерных массивов, а также для создания массивов с индексацией, не начинающейся с 0. В следующем примере создается двумерный массив размером 2x3 элемента. Базой первого измерения является 1, а второго 10.
int[] lengths = {2, 3};
int[] lowerBounds = {1, 10};
Array racers = Array.Createlnstance(typeof(Person), lengths,
lowerBounds);
Метод SetValue() , устанавливающий элементы массива, принимает индексы каждого измерения:
racers.SetValue (new Person
{
FirstName = "Alain",
LastName = "Prost"
}, 1, 10);
racers.SetValue(new Person
{
FirstName = "Emerson",
LastName = "Fittipaldi"
}, 1, 11);
racers.SetValue(new Person {
FirstName = "Ayrton",
LastName = "Senna"
}, 1, 12);
racers.SetValue(new Person
{
FirstName = "Ralf",
LastName = "Schumacher"
), 2, 10);
racers.SetValue(new Person
{
FirstName = "Fernando",
LastName = "Alonso"
}, 2, 11);
racers.SetValue(new Person
{
FirstName = "Jenson",
LastName = "Button"
}, 2, 12);
Хотя массив не базируется на 0, его можно присваивать переменной в обычной нотации С#. Следует лишь обращать внимание на то, чтобы не выходить за границы индексов:
Person[,] racers2 = (Person[,])racers;
Person first = racers2[l, 10];
Person last = racers2[2, 12];