Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический_курс.doc
Скачиваний:
36
Добавлен:
10.11.2019
Размер:
7.68 Mб
Скачать

7. Неявно типизированные массивы

Можно создать неявно типизированный массив (начиная с Visual C# 3.0), в котором тип экземпляра массива получается из элементов, указанных в инициализаторе массива. Правила для неявно типизированной переменной также применяются к неявно типизированным массивам.

Неявно типизированные массивы обычно используются в выражениях запроса вместе с анонимными типами и инициализаторами объектов и коллекций.

В следующих примерах показано, как создать неявно типизированный массив:

class ImplicitlyTypedArraySample

{

static void Main()

{

var a = new[] { 1, 10, 100, 1000 }; // int[]

var b = new[] { "Привет, ", null, "мир!" }; // string[]

// Одномерный массив массивов

var c = new[]

{

new[]{1,2,3,4},

new[]{5,6,7,8}

};

var d = new[]

{

new[]{"Luca", "Mads", "Luke", "Dinesh"},

new[]{"Karen", "Suma", "Frances"}

};

}

}

В предыдущем примере обратим внимание на то, что для неявно типизированных массивов квадратные скобки в левой части оператора инициализации не используются. Кроме того, следует обратить внимание на то, что инициализация массивов массивов, как и одномерных массивов, выполняется с помощью конструкции new [].

При создании анонимного типа, содержащего массив, этот массив неявно типизируется в инициализаторе объекта типа. В следующем примере contacts является неявно типизированным массивом анонимных типов, каждый из которых содержит массив с именем PhoneNumbers. Обратим внимание на то, что ключевое слово var внутри инициализаторов объектов не используется:

var contacts = new[]

{

new {

Name = " Женька",

PhoneNumbers = new[] { "8-111-222-33-44", "8-222-333-44-55" }

},

new {

Name = " Люська",

PhoneNumbers = new[] { "8-333-444-55-66" }

}

};

8. Передача массивов при помощи параметров ref и out

Как и все параметры out, параметр out типа массива перед использованием необходимо присвоить; то есть, он должен быть присвоен вызываемым. Пример:

static void TestMethod1(out int[] arr)

{

arr = new int[10];

}

Как и все параметры ref, параметр ref типа массива должен быть определённым образом присвоен вызывающим. Таким образом, четкое присвоение вызываемым не требуется. Параметр ref типа массива можно изменять как результат вызова. Например, массиву можно присвоить значение null, или же его можно инициализировать в другой массив. Пример:

static void TestMethod1(ref int[] arr)

{

arr = new int[10]; // arr инициализируется в другой массив

}

Следующие два примера демонстрируют отличия между параметрами out и ref при использовании для подстановки массивов в методы:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class Program

{

static void FillArray(out int[] arr)

{

arr = new int[5] { 1, 2, 3, 4, 5 };

}

static void Main()

{

int[] theArray; // Инициализация не требуется

// Передаем массив вызываемый использованием out

FillArray(out theArray);

Console.WriteLine("Массив элементов:");

for (int i = 0; i < theArray.Length; i++)

{

Console.Write(theArray[i] + " ");

}

Console.WriteLine("\nДля продолжения нажмите любую клавишу . . . ");

Console.ReadKey();

}

}

}

/* Выведет:

* Массив элементов:

* 1 2 3 4 5

* Для продолжения нажмите любую клавишу . . .

*/

В этом примере массив theArray инициализирован в вызывающем (метод Main) и подставляется в метод FillArray при помощи параметра ref. Некоторые из элементов массива обновляются в методе FillArray. Затем элементы массива возвращаются вызывающему и отображаются.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class Program

{

static void FillArray(ref int[] arr)

{

if (arr == null)

{

arr = new int[10];

}

arr[0] = 1111;

arr[4] = 5555;

}

static void Main()

{

int[] theArray = { 1, 2, 3, 4, 5 };

// ref

FillArray(ref theArray);

Console.WriteLine("Массив элементов:");

for (int i = 0; i < theArray.Length; i++)

{

Console.Write(theArray[i] + " ");

}

Console.WriteLine("\nДля продолжения нажмите любую клавишу . . . ");

Console.ReadKey();

}

}

}

/* Выведет:

* Массив элементов:

* 1111 2 3 4 5555

* Для продолжения нажмите любую клавишу . . .

*/