Освоение преобразования типов в C#: неявное, явное, Parse и Convert
Преобразование типов в C#: полное руководство
Научитесь конвертировать между типами данных в C# — от неявных и явных приведений к мощным методам Parse и Convert — с наглядными примерами и рекомендациями.
Преобразование типов — изменение значения из одного типа данных в другой — является базовым навыком в C#. Понимание того, когда и как использовать каждый метод, гарантирует, что ваш код будет безопасным и эффективным.
В C# преобразования делятся на две широкие категории:
- Неявные преобразования типов
- Явные преобразования типов (приведение)
1. Неявное преобразование типов в C#
Неявные преобразования выполняются компилятором автоматически, когда не может произойти потеря данных. Они безопасны и не требуют специального синтаксиса.
Типичные сценарии — преобразование меньшего числового типа в больший, например, int в double, чтобы значение можно было представить без усечения.
Пример: неявное преобразование типов
using System;
namespace MyApplication {
class Program {
static void Main(string[] args) {
int numInt = 500;
// Неявное преобразование
double numDouble = numInt;
Console.WriteLine($"Значение numInt: {numInt}");
Console.WriteLine($"Тип numInt: {numInt.GetType()}");
Console.WriteLine($"Значение numDouble: {numDouble}");
Console.WriteLine($"Тип numDouble: {numDouble.GetType()}");
Console.ReadLine();
}
}
}
Результат
Значение numInt: 500 Тип numInt: System.Int32 Значение numDouble: 500 Тип numDouble: System.Double
Поскольку double имеет большую емкость, компилятор безопасно повышает значение int без риска переполнения.
Примечание: неявные преобразования никогда не теряют данные, но увеличивают размер результирующего типа.
2. Явное преобразование типов (приведение) в C#
Явные преобразования, или приведения, используются при конвертации из большего типа в меньший или между несовместимыми типами. Разработчик должен явно выразить намерение, а компилятор может выдать предупреждение, если преобразование может отбросить данные.
Пример: явное преобразование типов
using System;
namespace MyApplication {
class Program {
static void Main(string[] args) {
double numDouble = 1.23;
int numInt = (int)numDouble; // Явное приведение
Console.WriteLine($"Исходное double: {numDouble}");
Console.WriteLine($"Преобразованное int: {numInt}");
Console.ReadLine();
}
}
}
Результат
Исходное double: 1.23 Преобразованное int: 1
Приведение отбрасывает дробную часть, поэтому 1.23 становится 1. Если точность важна, перед приведением рассмотрите использование методов округления.
Примечание: приведение также называется type casting.
3. Преобразование строк с Parse()
При конвертации из string в числовой тип методы int.Parse, double.Parse и др. предоставляют прямой и типобезопасный подход.
Пример: использование int.Parse
using System;
namespace Conversion {
class Program {
static void Main(string[] args) {
string n = "100";
int a = int.Parse(n);
Console.WriteLine($"Исходная строка: {n}");
Console.WriteLine($"Преобразованное int: {a}");
Console.ReadLine();
}
}
}
Результат
Исходная строка: 100 Преобразованное int: 100
Попытка разобрать нечисловую строку, такую как "test", вызовет FormatException. В продакшн-коде оберните вызов в try-catch или используйте int.TryParse для грамотной обработки ошибок.
4. Класс Convert
Статический класс Convert предлагает широкий набор методов для преобразования между множеством типов данных, часто выполняя необходимые проверки внутри.
| Метод | Описание |
|---|---|
ToBoolean() | Преобразует значение в bool |
ToChar() | Преобразует значение в char |
ToDouble() | Преобразует значение в double |
ToInt16() | Преобразует значение в 16-битное int |
ToString() | Преобразует значение в string |
Ниже приведены иллюстративные примеры распространенных преобразований.
Пример: int → string и double
using System;
namespace Conversion {
class Program {
static void Main(string[] args) {
int num = 100;
Console.WriteLine($"int значение: {num}");
string str = Convert.ToString(num);
Console.WriteLine($"string значение: {str}");
double dbl = Convert.ToDouble(num);
Console.WriteLine($"Double значение: {dbl}");
Console.ReadLine();
}
}
}
Результат
int значение: 100 string значение: 100 Double значение: 100
Пример: string ↔ double
using System;
namespace Conversion {
class Program {
static void Main(string[] args) {
string str = "99.99";
Console.WriteLine($"Исходная строка: {str}");
double dbl = Convert.ToDouble(str);
Console.WriteLine($"Преобразованное Double: {dbl}");
double num = 88.9;
Console.WriteLine($"Исходное double: {num}");
string newStr = Convert.ToString(num);
Console.WriteLine($"Преобразованная строка: {newStr}");
Console.ReadLine();
}
}
}
Результат
Исходная строка: 99.99 Преобразованное Double: 99.99 Исходное double: 88.9 Преобразованная строка: 88.9
Пример: int → bool
using System;
namespace Conversion {
class Program {
static void Main(string[] args) {
int num1 = 0;
int num2 = 1;
bool bool1 = Convert.ToBoolean(num1);
bool bool2 = Convert.ToBoolean(num2);
Console.WriteLine($"Булево значение 0: {bool1}");
Console.WriteLine($"Булево значение 1: {bool2}");
Console.ReadLine();
}
}
}
Результат
Булево значение 0: False Булево значение 1: True
Примечание: в C# 0 интерпретируется как false; любое ненулевое целое число оценивается как true.
Освоив эти техники преобразования, вы сможете писать код, который одновременно типобезопасен и выразителен, снижая ошибки выполнения и улучшая читаемость.
Язык C
- Мастерство преобразования типов в Python: Полное руководство
- Числа, преобразование типов и математика в Python: полное руководство
- Освоение приведения типов в Java: от расширения к сужению и далее
- Дженерики в Java: упрощение сортировки и повышение типобезопасности
- Спецификации низкоуглеродистой стали ASTM A1018 Grade CS Type B
- Спецификации стали ASTM A424 Grade Type II
- Спецификации стали ASTM A424 Grade Type I
- Сталь ASTM A792 Grade CS Type A — Свойства и спецификации
- Труба ASTM A53 Grade A Type E: спецификации и ключевые свойства
- Труба ASTM A53 Grade A Type S: бесшовная, спецификации и свойства