Оператор foreach
Вище ми розглядали такий простір імен, як System. Це простір імен містить у свою чергу інші простори імен. Розглянемо такий namespace, як System.Collections. У цей простір імен включений ряд класів, що дозволяють організовувати об'єкти різного типу в черги, стеки, словники і багато що інше. Розглянемо один з класів, що входять в System.Collections, який дозволяє організовувати масиви. Це клас ArrayList. Він має багато методів, наприклад Add, який дозволяє додавати в нього елементи. Припустимо, що ми маємо об'єкт цього класу і хочемо дістати доступ до всіх його елементів послідовно. Код, який це робить, показаний нижче.
using System.Collections;
ArrayList numbers = new ArrayList();
for (int i=0; i<10; i++)
{
numbers.Add(i);
}
. . . .
for (int i=0; i<numbers.Count; i++)
{
int number=(int) numbers[i];
Console.WriteLine(number);
}
Частина коду, яка займається прочитуванням елементів колекції, є достатньо громіздкою. Для того, щоб полегшити запис, можна використовувати оператора foreach, як показано нижче.
foreach (int number in numbers)
{
Console.WriteLine (number);
}
Цей оператор проходиться по всіх елементах колекції і заносить кожен елемент в змінну number, після цього виконує код, взятий у фігурні дужки (дужки в цьому випадку можна опустити).
Основною відмінністю від оператора for є те, що ви не можете модифікувати елементи колекції, використовуючи оператора, foreach, оскільки змінна number призначена тільки для читання, тому код нижче приведе до помилки компілювання.
foreach (int number in numbers)
{
number ++; // помилка
Console.WriteLine (number);
}
Доповнення:
С# дозволяє використовувати, при програмуванні елементів графічного інтерфейсу, функції WinAPI. Наприклад виклик функцій Win32 із платформи .NET можна зробити так:
Створимо у своїй папці папку MessageBox
Cтворимо текстовий файл <ім’я>.cs із такою програмою на C#
using System;
using System.Runtime.InteropServices;
namespace MessageBox
{
class Class1
{
[DllImport("user32.dll", EntryPoint="MessageBox", SetLastError=true, CharSet = CharSet.Auto)]
public static extern int MessageBox(int hWnd, String strMessage, String strCaption,
uint uiType);
[STAThread]
static void Main(string[] args)
{
MessageBox(0, "Наш виклик функції Win32!", " Виклик DLL з .NET", 0);
}
}
}
Дослідимо виведення на текстовий екран дійсного числа
using System;
namespace Float2String
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
double d = 3.1415926;
Console.WriteLine("{0}", d); // 3,1415926
Console.WriteLine("{0:F2}", d); // 3,14
Console.WriteLine(string.Format("{0}", d)); // 3,1415926
Console.WriteLine(string.Format("{0:F3}", d)); // 3,142
Console.WriteLine(d.ToString("F2")); // 3,14
Console.WriteLine(d.ToString("E")); // 3,141593E+000
Console.WriteLine(d.ToString("C")); // 3,14 грн.
Console.WriteLine(d.ToString("G")); // 3,1415926
Console.WriteLine(d.ToString("R")); // 3,1415926
Console.ReadLine();
} } }