Elementor Header #8

28. Явное преобразование типов

28. Явное преобразование типов в C#

1. Введение

В C# явное преобразование типов (explicit conversion) требуется, когда преобразование может привести к потере данных или ошибке. Оно выполняется вручную с использованием оператора приведения (тип) или специальных методов.

📌 Пример явного преобразования:

				
					double number = 9.7;
int result = (int)number; // Приведение double к int (отбрасывается дробная часть)
Console.WriteLine(result); // 9

				
			

2. Приведение числовых типов

2.1. Приведение с потерей данных

Если меньший тип не может вместить значение большего типа, то дробная часть отбрасывается.

				
					double num = 10.75;
int intNum = (int)num; // Явное приведение (дробная часть отбрасывается)
Console.WriteLine(intNum); // 10

				
			

2.2. Приведение с выходом за пределы

Если число превышает допустимые границы типа, происходит переполнение.

				
					int bigNumber = 300;
byte smallNumber = (byte)bigNumber; // Потеря данных
Console.WriteLine(smallNumber); // 44 (из-за переполнения)

				
			

2.3. Использование checked для контроля переполнения

Чтобы избежать неожиданного переполнения, используйте checked:

				
					checked
{
    int bigValue = 300;
    byte smallValue = (byte)bigValue; // Ошибка при выполнении
}

				
			

💡 Если переполнение происходит внутри checked блока – программа завершится с исключением.


3. Преобразование ссылочных типов

При наследовании можно приводить объекты от базового типа к производному и наоборот.

				
					class Animal { }
class Dog : Animal { }

Animal a = new Dog();
Dog d = (Dog)a; // Явное приведение

				
			

📌 Но если типы несовместимы, произойдет ошибка!

Чтобы избежать ошибок, используйте is или as:

				
					object obj = "Hello";
if (obj is string str)
{
    Console.WriteLine(str.ToUpper()); // HELLO
}

object obj2 = 123;
string? text = obj2 as string; // Вернет null, а не ошибку
Console.WriteLine(text); // Выведет пустую строку

				
			

4. Преобразование строк в числа

4.1. Convert.ToInt32

				
					string text = "123";
int number = Convert.ToInt32(text);
Console.WriteLine(number); // 123

				
			

📌 Если строка содержит нечисловые символы – ошибка!

4.2. int.Parse

				
					string text = "456";
int num = int.Parse(text);
Console.WriteLine(num); // 456

				
			

4.3. int.TryParse (безопасный метод)

				
					string input = "abc";
if (int.TryParse(input, out int value))
{
    Console.WriteLine(value);
}
else
{
    Console.WriteLine("Ошибка преобразования!");
}

				
			

💡 TryParse не вызывает исключение, если преобразование невозможно.

Заключение

🔹 Явное преобразование используется, когда возможна потеря данных или исключение.
🔹 Числовые типы приводятся через (тип), но возможны переполнения.
🔹 Для ссылочных типов лучше использовать is и as для безопасности.
🔹 Преобразование строк в числа через int.Parse и TryParse помогает избежать ошибок.

🚀 Правильное преобразование типов делает код более надежным и безопасным!

Тестовое задание

  1. Напишите программу, которая:
    ✅ Преобразует double в int, отбрасывая дробную часть.
    ✅ Пробует привести object к string через as.
    ✅ Использует TryParse для безопасного преобразования строки в число.

Пример кода:

				
					using System;

class Program
{
    static void Main()
    {
        // Преобразование double в int
        double number = 12.99;
        int intNumber = (int)number;
        Console.WriteLine($"Преобразованное число: {intNumber}");

        // Преобразование object в string
        object obj = "Hello, C#";
        string? text = obj as string;
        Console.WriteLine(text ?? "Не удалось преобразовать");

        // Безопасное преобразование строки в число
        string input = "42";
        if (int.TryParse(input, out int result))
        {
            Console.WriteLine($"Число: {result}");
        }
        else
        {
            Console.WriteLine("Ошибка преобразования!");
        }
    }
}

				
			

Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.

Codefor-Tech Чат

Привет! Я AI-бот. Чем могу помочь?
logo

Язык сайта: