JavaRush /Курси /C# SELF /Конвертація між типами даних

Конвертація між типами даних

C# SELF
Рівень 2 , Лекція 3
Відкрита

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.

Важливо! Арифметичні операції з типом 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() коректно їх обробляє.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ