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