← Назад к вопросам

Какие методы приведения типов в C# вы знаете?

1.6 Junior🔥 151 комментариев
#C# и ООП

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы приведения типов в C#

В C# существует несколько способов приведения типов, которые можно разделить на явные и неявные преобразования. Выбор метода зависит от отношений между типами, возможной потери данных и необходимости обработки исключений.

1. Неявное приведение (Implicit Conversion)

Выполняется автоматически компилятором, когда преобразование безопасно и не приводит к потере данных (например, из меньшего типа в больший).

int intValue = 100;
long longValue = intValue; // Неявное приведение int -> long
float floatValue = longValue; // Неявное приведение long -> float

2. Явное приведение (Explicit Conversion / Casting)

Требует указания целевого типа в скобках. Используется, когда преобразование может привести к потере данных или исключению.

double doubleValue = 9.78;
int intValue = (int)doubleValue; // Явное приведение, будет 9 (дробная часть отброшена)

long bigNumber = 10000000000;
int smallNumber = (int)bigNumber; // Возможна потеря данных, если число не влезает в int

3. Преобразование с помощью класса Convert

Статический класс Convert предоставляет методы для преобразования между базовыми типами, включая обработку null и культурных настроек.

string strNumber = "123";
int number = Convert.ToInt32(strNumber);
decimal value = Convert.ToDecimal("45.67");

// Обработка null
object nullObj = null;
int result = Convert.ToInt32(nullObj); // Вернет 0 для числовых типов

4. Методы Parse и TryParse

Используются для преобразования строк в другие типы данных. Parse выбрасывает исключение при ошибке, TryParse возвращает булево значение.

// Parse - выбрасывает FormatException при ошибке
int parsedInt = int.Parse("456");
double parsedDouble = double.Parse("3.14");

// TryParse - безопасный метод
string input = "123abc";
int tryResult;
bool success = int.TryParse(input, out tryResult); // success = false, tryResult = 0

5. Преобразование с помощью операторов as и is

Специальные операторы для работы с ссылочными типами и nullable-типами в контексте наследования.

// Оператор as - безопасное приведение ссылочных типов
object obj = "Hello World";
string str = obj as string; // Если приведение невозможно, вернет null

// Оператор is - проверка типа перед приведением
if (obj is string)
{
    string anotherStr = (string)obj;
}

6. Пользовательские преобразования

Можно определять собственные правила преобразования с помощью операторов implicit и explicit.

public class Temperature
{
    public double Celsius { get; set; }
    
    // Неявное преобразование double -> Temperature
    public static implicit operator Temperature(double celsius)
    {
        return new Temperature { Celsius = celsius };
    }
    
    // Явное преобразование Temperature -> double
    public static explicit operator double(Temperature temp)
    {
        return temp.Celsius;
    }
}

// Использование
Temperature temp = 25.5; // Неявное преобразование
double value = (double)temp; // Явное преобразование

7. Преобразование через интерфейсы

Приведение к интерфейсному типу, если класс реализует соответствующий интерфейс.

public interface IDisplayable
{
    void Display();
}

public class Product : IDisplayable
{
    public void Display() => Console.WriteLine("Product displayed");
}

Product product = new Product();
IDisplayable displayable = product; // Неявное приведение к интерфейсу

Критерии выбора метода приведения

  • Безопасность: Для безопасных преобразований используйте as, TryParse или проверку с is
  • Производительность: Явное приведение (casting) обычно быстрее, чем методы Convert
  • Обработка ошибок: Parse с исключениями vs TryParse с возвратом результата
  • Читаемость: Явные преобразования делают код более понятным
  • Гибкость: Пользовательские преобразования позволяют создавать семантически богатые модели

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

Какие методы приведения типов в C# вы знаете? | PrepBro