* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Перебор элементов массивов и наборов
8 февраля 2009
В Visual Basic .NET и Visual C# имеется специальный синтаксис для перебора эле- ментов массивов и наборов в цикле. Оператор For Each (foreach) позволяет пооче- редно обработать все элементы массива или набора. Это делается следующим обра- зом:
Visual Basic .NET Dim myArrayO As Integer = {1,2,3,4,5} Dim I As Integer For Each I in myArray MessageBox.Show(I.ToStringO) Next Visual C# int[] myArray - new int[] {1,2.3,4,5}; foreach (int I in myArray) { MessageBox.Show(I.ToString()); } При использовании такого синтаксиса с наборами у всех элементов набора дол- жен быть тот же тип, что и у переменной цикла. Если в цикле обратиться к элемен- ту набора, который невозможно записать в переменную цикла, генерируется ис- ключение InvalidCastException. Во избежание подобных проблем при работе с набо- рами, содержащими объекты разных типов, переменную цикла следует объявлять с типом Object, а также проверять допустимость типа элемента набора с помощью оператора typeof (Visual Basic .NET) или метода GetType (Visual C#): Visual Basic .NET 1 Этот пример предполагает, что myList - это набор типа ArrayList, ' содержащий, помимо строк, объекты других типов. Dim о as Object For Each о in myList If TypeOf о Is String Then MessageBox. Show(o.ToStringO) End If Next Visual C# // Этот пример предполагает, что myList - это набор типа ArrayList, // содержащий, помимо строк, объекты других типов, foreach (object о in myList) { if (o.GetType() == typeof(string)) { MessageBox. Show(o.ToStringO); ! ! Важно отметить, что при использовании цикла For Each (foreach), ссылка на эле- мент набора или массива, которая содержится в переменной цикла, доступна толь- ко для чтения. Следовательно, этот цикл не позволяет модифицировать элементы массивов и наборов. Чтобы получить возможность модифицировать элементы мас- сива или набора при переборе их в цикле, следует использовать цикл For,..Next (for) следующим образом: Visual Basic .NET Dim myArrayC) As Integer = {1,2,3,4,5} Dim x As Integer For x = 0 to myArray.GetUpperBound(O) myArray(x) += 1 MessageBox.Show(myArray(x).ToString()3 Next Visual C# int[] myArray = new int[] {1,2,3,4,5}; for (int x = 0; x <= myArray.GetUpperBourd{0}; x++) { myArraytx] ++; MessageBox.Show(myArray[x].ToString()); ; Резюме • Константы и перечисления делают код более читабельным и устойчивым к ошибкам, заменяя часто употребляемые значения понятными пользователю именами. Константы определяют с помощью ключевого слова Const (const); для объявления перечислений применяют ключевое слово Епит (епит). Константы могут быть объявлены на основе любых типов данных, а перечисления — только на основе целочисленных типов. • Массивы бывают одномерными и многомерными, последние в свою очередь могут быть прямоугольными и невыровненными. Все измерения прямоугольно- го массива составляют члены, образованные одинаковым числом элементов из других измерений. Члены измерений невыровненного массива отличаются чис- лом образующих их элементов из других измерений, В обоих случаях чем боль- ше у массива измерений, тем он сложнее. • Наборы позволяют работать с группами объектов одного или разных типов, Классов наборов несколько, все они располагаются в пространстве имен System, Collections. Класс System, CoIlections.ArrayList предоставляет основную функ- циональность для работы с наборами, достаточную для решения типовых задач. • Оператор For Each (foreach) позволяет перебирать значения элементов массива или коллекции в цикле, но не позволяет модифицировать значения элементов. Чтобы получить такую возможность, необходимо применить оператор For...Next (for).