1. Навіщо потрібна конвертація типів?
C# — це суворо типізована мова. Якщо у компʼютера є «коробочка» для числа, то спроба помістити туди текст — це приблизно те саме, що й спроба вставити вилку у USB-розʼєм. Компілятор вам такого не пробачить! 😡
У житті ми часто працюємо одночасно з різними типами даних. Наприклад, у вас є рядок, який містить число. Ось тут і потрібна конвертація (або перетворення) типів.
Розгляньмо приклад. Припустімо, ви хочете зберігати кількість користувачів:
int a = 1;
int b = "2";
int c = "три";
Компілятор одразу скаже: «Я не вмію автоматично перетворювати рядок на число. Без вас ніяк. Потрібно явно перетворити рядок на число».
У C# є кілька способів конвертації, і кожен — зі своїми плюсами, мінусами та типовими граблями.
2. Перетворюємо int у string
Часто потрібно отримати рядкове подання числа: наприклад, щоб вивести його на екран, зберегти у файл, передати мережею, обʼєднати з текстом тощо. У C# для цього існує кілька способів, кожен із яких зручний у різних ситуаціях.
Функція ToString()
Це основний і найпоширеніший спосіб:
int number = 42;
string str = number.ToString(); // str == "42"
ToString() перетворює число на рядок у вигляді, прийнятому за замовчуванням для цієї структури.
Рядкова інтерполяція ($"...")
Сучасний спосіб, зручний для складання рядків із змінними:
int number = 42;
string str = $"Число: {number}";
Інтерполяція рядків автоматично викликає ToString() для вставленого значення.
Можна комбінувати кілька змінних і навіть вказувати формат:
int number = 42;
string str = $"{number:D5}"; // "00042" — п’ять цифр із провідними нулями
Конкатенація з порожнім рядком
Старий, але цілком робочий спосіб:
int number = 42;
string str = number + "";
Такий підхід швидко працює для простих випадків, але він менш очевидний для читача коду.
3. Неявне перетворення у рядок
Як уже зазначалося вище, у C# будь-яку змінну, об’єкт чи вираз можна перетворити на тип string.
До того ж це автоматично відбувається, коли ми додаємо тип string до значення іншого типу. Приклади:
int a = 5;
string name = "Аня" + a; // name містить рядок Аня5
int a = 5;
string city = a + "New York" + a; // city містить рядок 5New York5
int number = 10;
string code = "Yo";
string message = "Hello! " + number + code; // message містить рядок Hello! 10Yo
У всіх трьох прикладах ми спокійно складали змінні типу int і string, і в результаті завжди отримували тип string.
Приклади:
int a = 5;
string name = "1" + a; // name містить рядок 15
int a = 5;
string city = a + "9" + a; // city містить рядок 595
int number = 10;
string code = "10";
string message = "" + number + code; // message містить рядок 1010
Операція додавання виконується зліва праворуч, тому результат може бути дещо неочікуваним. Приклад:
int a = 5;
string name = a + a + "1" + a; // name містить рядок 1015
Порядок виконання: ((a + a) + "1") + a
4. Перетворення рядка на число
Щоб перетворити число на рядок у C#, достатньо додати до нього порожній рядок:
string str = "" + число;
А що робити, якщо треба перетворити рядок на число? Будь-який рядок перетворити на число не можна. Але якщо рядок складається лише з цифр, то це можливо. Для цього у типу int є спеціальна функція Parse().
Виклик має такий вигляд:
int x = int.Parse("рядок")
Де int x — це оголошення цілочисельної змінної x, а рядок — це число, подане у вигляді рядка (рядок, що складається з цифр).
Приклади:
string str = "123";
int number1 = int.Parse(str); // number1 містить число 123
int number2 = int.Parse("321"); // number2 містить число 321
int number3 = int.Parse("321" + 0); // number3 містить число 3210
int number4 = "321"; // Не скомпілюється: змінна типу int, а значення типу string
Для відʼємних значень це також працює: функція int.Parse() коректно їх обробляє.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ