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# сделали так, что абсолютно все переменные, объекты, выражения в 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() очень умная.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ