Гид по технологиям

Преобразование и парсинг типов данных в C#

4 min read C++ Обновлено 02 Jan 2026
Преобразование типов в C# — парсинг и приведение
Преобразование типов в C# — парсинг и приведение

TL;DR

Коротко: в C# значения можно конвертировать разными способами — Parse, TryParse, Convert и явное приведение (casting). Выбирайте TryParse для безопасного разбора входных данных, используйте Convert/ToString для простых преобразований и учитывайте культуру/формат (например, разделитель дробной части и формат даты).

Код на C# на экране

Когда вы объявляете переменную в C#, обычно вы задаёте для неё конкретный тип: int, double, bool, string и т.д. Часто требуется преобразовать значение из одного типа в другой — например, превратить строку в число. Ниже — практическое руководство с примерами, лучшими практиками и проверками.

Зачем нужно преобразование и парсинг типов

В консольном приложении пользовательский ввод всегда приходит как строка:

Console.WriteLine("Введите ваш возраст:");
string age = Console.ReadLine();

Если вы попытаетесь использовать age в математике, возникнет ошибка компиляции/выполнения, поскольку это string, а не int.

Важно: тип string хранит текст — даже если в нём цифры. Для арифметики нужно явно преобразовать.

Ошибка компиляции: некорректная операция со строкой и числом

Другой случай — методы, специфичные для типа. Например, у DateTime есть метод AddMinutes, у string его нет:

Ошибка компиляции: метод DateTime.AddMinutes недоступен для строки

Иногда структура класса или контракт API требует строго заданных типов — тогда преобразование обязательно.

Основные способы преобразования

  • Parse()/TryParse() — у типов (Int32.Parse, Double.TryParse и т.д.). Parse бросает исключение при ошибке; TryParse возвращает bool и не бросает.
  • Convert.* — набор вспомогательных методов Convert.ToInt32, Convert.ToBoolean и т.д.; умеет работать с null (возвращает 0 или false) и некоторыми нестандартными входами.
  • Явное приведение (casting) — для совместимых типов (например, double -> int). Отбрасывает дробную часть при приведении к int.
  • ToString() — превращает значение в строку.

Примеры: парсинг общих типов

Строки в целые числа

string strInt = "45";
int int32 = Int32.Parse(strInt);
Console.WriteLine(int32);  // output: 45

Можно парсить в Int16, Int32, Int64 по нужной разрядности. Parse бросит FormatException, если строка не число:

string invalidString = "Hello";
int invalidResult = Int32.Parse(invalidString);

Ошибка времени выполнения: неверная строка для Int32

Безопаснее использовать TryParse:

int tryParseResult = 0;
if (Int32.TryParse(invalidString, out tryParseResult))
{
    Console.WriteLine(tryParseResult);
}
else
{
    Console.WriteLine("Некорректное целое число");
}

Обратно в строку:

string intString = 45.ToString();
Console.WriteLine(intString);  // output: "45"

Строки в double

Парсинг похож на целые, но обратите внимание на культуру (разделитель дробной части):

string strDouble = "90.5";
double d = Double.Parse(strDouble, System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(d);  // output: 90.5

Если в вашей локали используется запятая (“90,5”), используйте CultureInfo.CurrentCulture или Parse с явным NumberFormatInfo.

TryParse-пример:

string invalidStringDouble = "Hello";
double tryParseDouble;
if (Double.TryParse(invalidStringDouble, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out tryParseDouble))
{
    Console.WriteLine(tryParseDouble);
}
else
{
    Console.WriteLine("Некорректный формат double");
}

Обратно в строку:

double dDouble = 90.5;
string dString = dDouble.ToString(System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(dString);  // output: "90.5"

Double в int (cast)

При явном приведении дробная часть отбросится:

double dValue = 12.34;
int iValue = (int)dValue;
Console.WriteLine(iValue);  // output: 12

Обратное приведение:

dValue = (double)iValue;
Console.WriteLine(dValue);  // output: 12

Строки и булевы значения

string stringBool = "True";
bool b = bool.Parse(stringBool);
// или
b = Convert.ToBoolean(stringBool);
Console.WriteLine(b);  // output: True

И обратно:

string strTrue = true.ToString();
string strFalse = false.ToString();

Целые числа и булевы значения

Convert.ToBoolean(0) -> false, Convert.ToBoolean(1) -> true. Любое не-нулевое число вернёт true.

int falseBit = 0;
int trueBit = 1;
Console.WriteLine(Convert.ToBoolean(falseBit));  // output: False
Console.WriteLine(Convert.ToBoolean(trueBit));   // output: True

int otherBit = 8;
Console.WriteLine(Convert.ToBoolean(otherBit));  // output: True

Обратно:

bool iBool = true;
int bInt = Convert.ToInt32(iBool);
Console.WriteLine(bInt);  // output: 1

Строки в DateTime

Учтите формат даты и культуру при парсинге. В России привычный формат — dd.MM.yyyy, в США — MM/dd/yyyy.

DateTime newDateTime = DateTime.Parse("01.01.2018 00:00:00", System.Globalization.CultureInfo.GetCultureInfo("ru-RU"));
Console.WriteLine(newDateTime);  // output: 01.01.2018 00:00:00

Или с ParseExact для строгого контроля формата:

var format = "dd.MM.yyyy HH:mm:ss";
DateTime dt = DateTime.ParseExact("01.01.2018 00:00:00", format, System.Globalization.CultureInfo.GetCultureInfo("ru-RU"));

Обратно в строку:

DateTime dt2 = new DateTime(2018, 1, 1);
string dtString = dt2.ToString("dd.MM.yyyy HH:mm:ss", System.Globalization.CultureInfo.GetCultureInfo("ru-RU"));
Console.WriteLine(dtString);  // output: 01.01.2018 00:00:00

Когда парсинг может подвести

  • Непредсказуемый формат входных данных (разные локали, разные разделители).
  • Иногда Parse бросит исключение — используйте TryParse для внешних источников.
  • Convert может не подходить при строгой валидации (он может привести null к 0).

Пример: строка “1,234” может означать 1.234 или 1234 в зависимости от культуры.

Примечание: всегда валидируйте входные данные и логируйте неудачные попытки парсинга.

Альтернативные подходы и эвристики

  • Если данные приходят из API — договоритесь о контракте (JSON с типами), чтобы не парсить вручную.
  • Для сложных правил преобразования используйте Map-слой или AutoMapper с кастомными конвертерами.
  • Для ввода от пользователя всегда применять TryParse + сообщение об ошибке.

Ментальная модель: «Источник — Надежность — Контракт». Чем менее надежен источник, тем строже парсинг и валидация.

Роль‑ориентированные чеклисты

  • Для разработчика:

    • Использовать TryParse для данных от пользователей.
    • Указывать культуру при парсинге чисел/дат.
    • Логировать ошибки парсинга.
  • Для QA:

    • Тестировать разные локали (ru-RU, en-US).
    • Проверять краевые значения и пустые строки.
    • Проверять форматы дат с/без времени.
  • Для архитектора:

    • Задокументировать контракт данных API.
    • Предусмотреть версионирование форматов.

Критерии приёмки

  • Входные строки корректно обрабатываются для целевых культур.
  • Приложение не падает при неверных данных (используется TryParse или обработка исключений).
  • Логируются причины неудачных преобразований.

Тестовые сценарии (минимум)

  1. Parse корректной строки “45” -> int 45.
  2. TryParse некорректной строки “abc” -> возвращает false, значение по умолчанию 0.
  3. Parse double со строкой “90.5” в InvariantCulture -> 90.5.
  4. ParseExact даты “01.01.2018 00:00:00” с форматом dd.MM.yyyy HH:mm:ss -> совпадение.

Безопасность и приватность

Парсинг сам по себе не создаёт уязвимости, но стоит контролировать исключения и логи: не выводите в лог конфиденциальные данные. Для данных, пришедших от внешних источников, применяйте валидацию и ограничения по длине.

Краткий словарь терминов

  • Parse: метод, который преобразует строку в тип и может бросить исключение при ошибке.
  • TryParse: безопасная версия, возвращает bool и использует out-параметр для результата.
  • Convert: утилита .NET для преобразований с некоторыми упрощениями.
  • Casting: явное приведение типов (обычно для совместимых типов).

Итог

Преобразование типов в C# — стандартная задача, но важно учитывать источник данных, локаль и требуемую степень безопасности. В большинстве случаев для пользовательского ввода выбирайте TryParse; для строгого соответствия формату используйте ParseExact; для простых преобразований — Convert и ToString.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Действие при закрытии крышки в Windows
Windows

Действие при закрытии крышки в Windows

Защита записи на SD и USB в Windows
Безопасность

Защита записи на SD и USB в Windows

Обновление ядра WSL вручную в Windows 11
Инструкции

Обновление ядра WSL вручную в Windows 11

Как закрыть аккаунт Amazon — шаги и риски
Руководство

Как закрыть аккаунт Amazon — шаги и риски

Исправить видео на YouTube без потери просмотров
YouTube

Исправить видео на YouTube без потери просмотров

Как удалить аккаунт Lemon8 — пошагово
соцсети

Как удалить аккаунт Lemon8 — пошагово