|
Программирование >> Обработка исключительных ситуаций
Имя задает локальную по отношению к циклу переменную, которая будет по очереди принимать все значения из массива выражение (в качестве выражения чаще всего применяется имя массива или другой группы данных). В простом или составном операторе, представляющем собой тело цикла, выполняются действия с переменной цикла. Тип переменной должен соответствовать типу элемента массива. Например, пусть задан массив: int[] а = {24, 50, 18, 3, 16, -7, 9, -1 }; Вывод этого массива на экран с помощью оператора foreach выглядит следующим образом: foreach ( int х in а ) Console.WriteLineC х ); Этот оператор выполняется так: на каждом проходе цикла очередной элемент массива присваивается переменной х и с ней производятся действия, записанные в теле цикла. Ступенчатый массив из листинга 6.4 вывести на экран с помощью оператора foreach немного сложнее, чем одномерный, но все же проще, чем с помощью цикла for: foreach ( int[] х in а ) { foreach ( int у in х ) Console.WriteC \t + у ): Console.WriteLineC); В листинге 6.5 решается та же задача, что и в листинге 6.1, но с использованием цикла foreach. Обратите внимание на то, насколько понятнее стала программа. Листинг 6.5. Работа с одномерным массивом с использованием цикла foreach using System; namespace ConsoleApplicationi { class Classl { static void MainO int[] a = { 3, 12, 5, -9, 8, -4 }; Console.WriteLineC Исходн1й массив: ); foreach ( int el em in a ) Console.WriteC \t + elem ); Console.WriteLineC); long sum = 0; сумма отрицательных элементов int num =0; количество отрицательных элементов foreach С int elem in а ) if ( elem < 0 ) 138 Глава 6. Массивы и строки Листинг 6.5 (продолжение) sum += elem; ++num; Console.WriteLineC sum = + sum ); Console.WriteLineC num = + num ); int max = a[0]; максимальн1й элемент foreach ( int elem in a ) if ( elem > max ) max = elem; Console.WriteLineC max = + max ); А вот как можно переписать метод вывода массива из листинга 6.3: public static void PrintArrayC string header, Array a ) { Console.WriteLineC header ); foreach ( object x in a ) Console.WriteC \t + x ); Console.WriteLineC); Такая запись становится возможной потому, что любой объект может быть неявно преобразован к типу его базового класса, а тип object, как вы помните, является корневым классом всей иерархии. Когда вы продвинетесь в изучении С# до раздела Виртуальные методы (см. с. 178), вы поймете механизм выполнения этого кода, а пока можете просто им пользоваться. ВНИМАНИЕ- Ограничением оператора foreach является то, что с его помощью можно только просматривать значения в группе данных, но не изменять их. Массивы объектов При создании массива, состоящего из элементов ссылочного типа, память выделяется только под ссылки на элементы, а сами элементы необходимо разместить в хипе явным образом. В качестве примера создадим массив из объектов некоторого класса Monster: using System; namespace ConsoleApplicationi class Monster { .. . } class Classl
В программе для получения случайных значений использован стандартный класс Random, который описан далее в этой главе (см. с. 148). В операторе 1 выделяется пять ячеек памяти под ссылки на экземпляры класса Monster?, и эти ссылки заполняются значением null. В цикле 2 создаются пять объектов: операция -ew выделяет память в хипе необходимого для хранения полей объекта объема, а конструктор объекта заносит в эти поля соответствующие значения (выполняется версия конструктора с тремя параметрами). Цикл 3 демонстрирует удобство применения оператора foreach для работы с массивом. Символы и строки Обработка текстовой информации является, вероятно, одной из самых распро-.траненных задач в современном программировании, и С# предоставляет для ее г-ешения широкий набор средств: отдельные символы, массивы символов, изменяемые и неизменяемые строки и регулярные выражения. Символы Символьный тип char предназначен для хранения символов в кодировке Unicode. Способы представления символов рассматривались в разделе Литералы (см. с. 26). Символьный тип относится к встроенным типам данных С# и соответствует стандартному классу Char библиотеки .NET из пространства имен System. В этом классе определены статические методы, позволяющие задать вид и категорию символа, { static void MainO Random rnd = new Random(); const int n = 5; Monster[] stado = new Monster[n]: 1 for ( int i = 0; i < n; ++i ) 112 stado[i] = new Monster( rnd.Next( 1, 100 ), rnd.Next( 1, 200 ), Crazy + i .ToStringO ): foreach ( Monster x in stado ) x.Passport(); 3 Результат работы программы:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |