Перерахування

При роботі з сучасними мовами програмування можна відмітити, що часто замість цифрових констант і значень використовуються імена. Так відбувається, наприклад, при вказівці кольору того або іншого елементу управління або об'єкту. Зазвичай колір задається у вигляді код, відповідних інтенсивності кожної його складової: червоного, зеленого, синього кольору; проте це незручно, оскільки не є наочним представленням отримуваного в результаті кольору. Для вирішення завдання спрощення використання квітів застосовується іменована сукупність квітів, що зіставляє код з найменуванням. Це дає можливість в програмному коді використовувати імена найбільш квітів, що часто вживаються. Наприклад, колір тексту, що виводиться на екран за допомогою елементу Label, можна задати за допомогою команди

Label1.ForeColor=Color.Red;

В даному випадку ім'я Red відповідає червоному кольору з набору квітів Colors. Такі набори називаються перерахуваннями.

Перерахування можна створити таким чином:

enum OrganizationType{ Education Trade Manufacture Services}

Перерахування OrganizationType визначає чотири іменовані константи, кожною з яких відповідає певне числове значення. За умовчанням першому елементу перерахування відповідає значення 0, другому - 1, третьому - 2 і так далі

При необхідності точку відліку номерів можна змінити. У наступному прикладі нумерація елементів перерахування починається з числа 10:

enum OrganizationType{ Education=10 Trade Manufacture Services}

Номери, що привласнюються змінним, не обов'язково повинні йти послідовно. Вони можуть бути розташовані в довільному порядку.

За умовчанням до елементів перерахування застосовується тип даних int. Проте для елементів перерахування можна використовувати будь-який цілочисельний тип даних, наприклад byte:

enum OrganizationType:byte{ Education Trade Manufacture Services}

Всі перерахування в C# походять від єдиного базового класу System.Enum. Цей клас містить методи, що істотно полегшують роботу з перерахуваннями. Так, статичний метод GetUnderlyingType() дозволяє отримати інформацію про те, який тип даних використовується для представлення числових значень елементів перерахування.

Наприклад, наступний рядок виведе на екран System.Byte, відповідний типу елементів перерахування OrganizationType:

Response.Write(Enum.GetUnderlyingType(typeof(OrganizationType)));

Enum дозволяє отримати значущі імена елементів перерахування по їх числових значеннях. Для цього використовується статичний метод Format(). Наступний приклад виведе на екран найменування елементу перерахування OrganizationType, якому відповідає значення 2 (в даному випадку — Manufacture):

Response.Write(Enum.Format(typeof(OrganizationType),(byte) 2,"G"));

Параметр "G", вказаний у функції Format, задає режим виведення рядка результату. G означає, що результат виводитиметься у вигляді рядка. Можливі ще два параметри форматування. X - шістнадцятиричне представлення результату, d - десяткове значення.

У класі System.Enum існує також метод, що дозволяє створити масив на основі вказаного перерахування. Наприклад, наступний рядок створює масив а, що складається з 4 елементів. У перший елемент буде записано значення Education, в друге - Trade і так далі

Array а = Enum.GetValues(typeof(OrganizationType));

Якщо потрібно визначити, чи є символьний рядок елементом перерахування, необхідно використовувати властивість IsDefined класу Enum. Наступні приклади демонструють застосування цієї властивості. У першому випадку результат перевірки буде позитивним, в другому - негативним:

bool r = Enum.IsDefined(typeof(OrganizationType), "Trade");bool r1 = Enum.IsDefined(typeof(OrganizationType), "Entertainment");

Робота з рядками в C#

По аналогії з масивами всі рядки в C# походять від одного базового класу - System.String, у якому реалізовано достатньо багато різних методів, що здійснюють всілякі операції над рядками. Найцікавіші методи класу String представлені нижчим.

Length Дозволяє отримати кількість символів в рядку.
Concat() Дозволяє з'єднати декілька рядків або змінних типу object.
CompareTo() Дозволяє порівняти два рядки. У разі рівності рядків результат виконання функції рівний нулю. При позитивному значенні функції більшим є рядок, для якого викликався метод.
Copy() Створює нову копію існуючого рядка.
Format() Застосовується для форматування рядка з використанням різних примітивів (рядків і числових даних) і підстановлювальних виразів вигляду {0}.
Insert() Дозволяє вставити один рядок всередину існує.
Remove() Replace() Видаляють або замінюють символи в рядку.
ToUpper() ToLower() Перетворять всі символи рядка в рядкових або прописних.
Chars Дозволяє отримати символ, що знаходиться в певній позиції рядка.
Join() Створює рядок, сполучаючи задані рядки і розділяючи їх рядком-роздільником.
Replace() Замінює один символ рядка іншим.
Split() Повертає масив рядків з елементами - підрядками основного рядка, між якими знаходяться символи-роздільники.
Substring() Дозволяє отримати підрядок основного рядка, задану довжину, що починається з певного символу і має задану довжину.
Trim() Видаляє пропуски або набір заданих символів на початку і кінці основного рядка.
ToCharArray() Створює масив символів і поміщає в нього символи початкового рядка.

При роботі з рядками в C# необхідно враховувати наступне. Тип string є посилальним типом. Проте, не дивлячись на це, при використанні операцій порівняння відбувається порівняння значень строкових об'єктів, а не адрес цих об'єктів, розміщених в оперативній пам'яті. Крім того, оператор "+" об'єкту string переобтяжений так, що при його використанні використовується метод Concat().

Розглянемо декілька прикладів використання можливостей роботи з рядками.

У наступному прикладі функція MakeLine створює рядок, який складається з символів, що виходять шляхом нескладних обчислень. Результати обчислень заносяться в масив рядків. Таким чином, масив sArr після завершення циклу містить значення всіх отриманих чисел. Після цього, використовуючи роздільник, передаваний у функцію як аргумент, а також функцію Join, значення всіх осередків масиву sArr об'єднуються в рядок:

protected void Page_Load(object sender, EventArgs e){ Response.Write(MakeLine(0, 5 ", ")); Response.Write("</br>"); Response.Write(MakeLine(1, 6 " ")); Response.Write("</br>"); Response.Write(MakeLine(9, 9 ": ")); Response.Write("</br>"); Response.Write(MakeLine(4, 7, "< "));} private static string MakeLine(int initVal, int multVal, string sep){ string[] sArr = new string[10]; for (int i = initVal; i < initVal+10; i++) sArr[i-initVal]= String.Format("{0-3}", i * multVal); return String.Join(sep, sArr);}

Результат роботи програми представлений на рис. 3.5.

Мал. 3.5. Результат роботи програми з використанням функції Join

Досить часто при роботі з рядками виникає необхідність розділити рядок на підрядки, відокремлені один від одного заданими символами-роздільниками. У наступному прикладі задається рядок символів, в якому присутньо декілька символів-роздільників. За допомогою функції Split даний рядок розділяється на підрядки, які потім виводяться на екран кожна в окремому рядку. Для завдання символів-роздільників використовується масив символів. В даному прикладі також застосовується функція Trim, необхідна в даному випадку для того, щоб переконатися в тому, що заданий рядок не складається з одних лише пропусків.

Початковий код даного прикладу приведений нижче.

string words = "рядок, що містить декілька слів, а також знаків пунктуації: таких як двокрапка і крапка.";string [] split = words.Split(new Char [] {' ', '',, '.' ':'});foreach (string s in split){ if (s.Trim()!= "") Response.Write(s+"</br>");}

Підсумком роботи даної програми буде наступний результат, зображений на рис. 3.6.

Мал. 3.6. Результат роботи програми з використанням функції Split


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: