Оператор foreach допускает циклическое обращение к массиву только в опреде ленном порядке: от начала и до конца массива, поэтому его применение кажется, на первый взгляд, ограниченным. Но на самом деле это не так. В большом числе алго ритмов, самым распространенным из которых является алгоритм поиска, требуется именно такой механизм. В качестве примера ниже приведена программа, в которой цикл foreach используется для поиска в массиве определенного значения. Как только это значение будет найдено, цикл прервется. // Поиск в массиве с помощью оператора цикла foreach. using System; class Search { static void Main { int[] nums = new int[10]; int val; bool found = false; // Задать первоначальные значения элементов массива nums. for(int i = 0; i < 10; i++) nums[i] = i; val = 5; // Использовать цикл foreach для поиска заданного // значения в массиве nums. foreach(int х in nums) { if(x == val) ( found = true; break; } if(found) Console.WriteLine("Значение найдено!"); } }
При выполнении этой программы получается следующий результат. Значение найдено!
Оператор цикла foreach отлично подходит для такого применения, поскольку при поиске в массиве приходится анализировать каждый его элемент. К другим при мерам применения оператора цикла foreach относится вычисление среднего, поиск минимального или максимального значения среди ряда заданных значений, обнаруже ние дубликатов и т.д. Как будет показано далее в этой книге, оператор цикла foreach оказывается особенно полезным для работы с разными типами коллекций. Строки
С точки зрения регулярного программирования строковый тип данных string от носится к числу самых важных в С#. Этот тип определяет и поддерживает символьные строки. В целом ряде других языков программирования строка представляет собой массив символов. А в C# строки являются объектами. Следовательно, тип string от носится к числу ссылочных. И хотя string является встроенным в C# типом данных, его рассмотрение пришлось отложить до тех пор, пока не были представлены классы и объекты.
На самом деле класс типа string уже не раз применялся в примерах программ, начиная с главы 2, но это обстоятельство выясняется только теперь, когда очередь до шла до строк. При создании строкового литерала в действительности формируется строковый объект. Например, в следующей строке кода: Console.WriteLine("В C# строки являются объектами.");
текстовая строка "В C# строки являются объектами." автоматически преобра зуется в строковый объект средствами С#. Следовательно, применение класса типа string происходило в предыдущих примерах программ неявным образом. А в этом разделе будет показано, как обращаться со строками явным образом. Построение строк
Самый простой способ построить символьную строку — воспользоваться строко вым литералом. Например, в следующей строке кода переменной ссылки на строку str присваивается ссылка на строковый литерал. string str = "Строки в C# весьма эффективны.";
В данном случае переменная str инициализируется последовательностью симво лов "Строки в C# весьма эффективны.".
Объект типа string можно также создать из массива типа char. Например: char[] charray = {'t', 'е', 's', 't'}; string str = new string(charray);
Как только объект типа string будет создан, его можно использовать везде, где только требуется строка текста, заключенного в кавычки. Как показано в приведенном ниже примере программы, объект типа string может служить в качестве аргумента при вызове метода WriteLine. // Создать и вывести символьную строку. using System; class StringDemo { static void Main { char[] charray = {'Э', 't', 'o', ' ', 'с', 't', 'p', 'o', 'к', 'a', string strl = new string(charray); string str2 = "Еще одна строка."; Console.WriteLine(strl); Console.WriteLine(str2); } }
Результат выполнения этой программы приведен ниже. Это строка. Еще одна строка. Обращение со строками